限制自定义控件的可调整大小尺寸(c#.net)

时间:2010-06-22 13:32:33

标签: c# user-controls

我在MS Visual C#中创建了一个用户控件,有一件事我找不到答案:

如何在设计视图中限制控件可以调整大小的尺寸?

对于我要问的一个明显的例子,内置的TrackBar控件只能变得更宽,而不是更高,并且只在设计模式下左右显示调整大小的方块。有没有办法为用户控件复制它?

我已尝试在设计器中为我的控件设置MinimumSize和MaximumSize值,但这不会产生理想的结果。

3 个答案:

答案 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