我在MS Visual C#中创建了一个用户控件,有一件事我找不到答案:
如何在设计视图中限制控件可以调整大小的尺寸?
对于我要问的一个明显的例子,内置的TrackBar控件只能变得更宽,而不是更高,并且只在设计模式下左右显示调整大小的方块。有没有办法为用户控件复制它?
我已尝试在设计器中为我的控件设置MinimumSize和MaximumSize值,但这不会产生理想的结果。
答案 0 :(得分:3)
要获得您所谈论的完整行为(顶部/底部或左/右没有装饰者)和设计时环境中的自定义功能,您可能不得不求助于为您的控件构建自定义控件设计器
这是一个很大的话题,因为你可以做很多事情。实际上,您要创建一个继承自ControlDesigner
的类,覆盖您需要的任何功能,然后使用DesignerAttribute
在用户控件上注册它,为第二个参数指定typeof(IDesigner)
(以及第一个自定义的ControlDesigner派生类型。)
Enhancing Design-time Support
Custom Designers
ControlDesigner class example
Custom Design-time Control Features in Visual Studio .NET
现在,就TrackBar而言,它有自己的设计器来覆盖ControlDesigner.SelectionRules属性。此属性只允许您返回枚举值(它是Flags枚举,因此您可以将它们组合在一起),指示您的设计时选择装饰器如何显示(或不显示)。一旦你通过设计师限制了设计时间的大小调整,只需控制你自己就可以约束自己的大小SetBoundsCore。
答案 1 :(得分:1)
我很确定您可以使用Control.SetBoundsCore
执行此操作,如此处所述。link text
答案 2 :(得分: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 Forms Desinger的惯例:http://msdn.microsoft.com/en-us/library/53b8022e.aspx