2010-06-22 67 views
2

我做在微軟的Visual C#的用戶控件,並且有一兩件事,我無法找到答案:限制自定義控件的可調整大小的尺寸(C#.NET)

如何限制哪些尺寸的控件可以在設計視圖中調整大小?

對於要問什麼,我一個明顯的例子,內置的跟蹤條控件只能只能做得更寬,身高不,只顯示在左側和右側在設計模式中調整廣場。有沒有一種方法來複制這個用戶控件?

我試圖在設計我的控制設置和的minimumSize值MAXIMUMSIZE,但是這並沒有給理想的結果。

+0

有什麼不好的minimumSize和MAXIMUMSIZE? – 2010-06-22 13:39:16

+0

一旦我的控件實例被放到窗體上,這些值就會出現在屬性瀏覽器中,因此用戶可以覆蓋它們。在有限的尺寸上調整大小的裝飾品仍然存在,使控制整體上非專業的感覺。 – 2010-06-23 16:58:37

回答

3

要在設計時環境中獲得完整的行爲(在頂部/底部或左側/右側沒有裝飾)和自定義功能,您可能必須求助於構建自定義控件設計器你的控制。

這是一個很大的話題,因爲有很多的事情可以做。有效地你會做的是創造任何你需要的功能的類,從ControlDesigner繼承,覆蓋,然後將其註冊在與DesignerAttribute用戶控件,爲第二個參數指定typeof(IDesigner)(和您的自定義ControlDesigner派生類型第一) 。

Enhancing Design-time Support
Custom Designers
ControlDesigner class example
Custom Design-time Control Features in Visual Studio .NET

現在,在跟蹤條的情況下,它有自己的設計師,它覆蓋ControlDesigner.SelectionRules財產。這個屬性只是讓你返回一個枚舉值(這是一個標誌枚舉,這樣你就可以OR在一起),表明你的設計時選擇裝飾器如何顯示(或不顯示)。一旦你限制設計時通過設計師調整,它只是到您的控件本身來約束自己的大小VAI SetBoundsCore

+0

我也強烈推薦下載反射器。查看TrackBar(及其關聯的TrackBarDesigner)的源代碼,您可以收集所需的一切,以獲得您想要的行爲。 – 2010-06-22 16:32:25

+0

感謝您的回答,這是出色的工作。 – 2010-06-23 16:51:59

1

我確信你可以用Control.SetBoundsCore做到這一點,如下所述。 link text

1

我不知道尺寸調整方形但MaximunSize和是的minimumSize爲您正確的價值觀。 但是這是不夠的,它們設置在類的構造函數,因爲每次你從設計師放下你的控制的一個實例這些數值得到的構造後設置窗體。

您應該:

覆蓋MinumumSize和MAXIMUMSIZE,做一套淨額從你的價值,但你的價值基準值。

private Size maxSize = new Size(100, 5); 
public override Size MaximumSize 
{ 
    get { return base.MaximumSize; } 
    set { base.MaximumSize = maxSize; } 
} 

在你的類中創建一個公共方法:

public bool ShouldSerializeMaximumSize() 
{ 
    return false; 
} 

private void ResetMaximumSize() 
{ 
    me.MaximumSize = maxSize; 
} 

這些方法是從Windows公約窗體Desinger:http://msdn.microsoft.com/en-us/library/53b8022e.aspx

相關問題