比如,重寫一個類TextBox的Control,那麼自然也希望它能夠像TextBox一樣,拖到窗體上後,只可改變寬度,不可改變高度,除非修改了Font。對這個功能的實現,其實非常簡單,之所以貼出來,就算是方便大家吧。
例碼:
[Designer(typeof(XControlDesigner))]
public class XControl:Control
{
...//具體實現
}
public class XControlDesigner:System.Windows.Forms.Design.ControlDesigner
{
public XControlDesigner()//2003下需要,2005下可以不加
{
}
public override SelectionRules SelectionRules
{
get
{
//具體的控制項可以參考SelectionRules的枚舉成員
SelectionRules rules = SelectionRules.Visible | SelectionRules.Moveable |
SelectionRules.LeftSizeable | SelectionRules.RightSizeable;
return rules;
}
}
}
那麼這個功能就實現了,而如果用代碼修改控件的高度呢,你會發現還是可以修改的,那麼必須要在控件內重寫一個方法:
protected override void SetBoundsCore(int x, int y, int width, int height, BoundsSpecified specifIEd)
{
//計算當前Font下的高度
int hgt = Font.Height;//對於自定義控件的高度,可能需要具體計算
base.SetBoundsCore (x, y, width, hgt, specifIEd);
}