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

限制自定义控件(c#.net)的可调整大小的维度,c#,user-controls,C#,User Controls,我正在MS Visual C#中制作一个用户控件,有一件事我就是找不到答案: 如何在设计视图期间限制控件可以调整大小的尺寸 为了清楚地说明我的问题,内置的轨迹栏控件只能变得更宽,而不能更高,并且在设计模式下只能在左右两侧显示调整大小的方块。有没有一种方法可以将其复制到用户控件中 我已经尝试在设计器中为我的控件设置MinimumSize和MaximumSize值,但效果并不理想。我很确定您可以使用控件进行设置。SetBoundsCore,如下所述。以获得您所谈论的全部行为(顶部/底部或左侧/右侧没

我正在MS Visual C#中制作一个用户控件,有一件事我就是找不到答案:

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

为了清楚地说明我的问题,内置的轨迹栏控件只能变得更宽,而不能更高,并且在设计模式下只能在左右两侧显示调整大小的方块。有没有一种方法可以将其复制到用户控件中


我已经尝试在设计器中为我的控件设置MinimumSize和MaximumSize值,但效果并不理想。

我很确定您可以使用
控件进行设置。SetBoundsCore
,如下所述。

以获得您所谈论的全部行为(顶部/底部或左侧/右侧没有装饰条)在设计时环境中,您可能需要为控件构建自定义控件设计器

这是一个巨大的话题,因为你可以做很多事情。实际上,您要做的是创建一个继承自
ControlDesigner
的类,覆盖您需要的任何功能,然后使用
DesignerAttribute
在用户控件上注册它,为第二个参数指定
typeof(IDesigner)
(为第一个参数指定自定义ControlDesigner派生类型)





现在,在TrackBar的情况下,它有自己的设计器来覆盖该属性。此属性仅允许您返回一个枚举值(它是一个标志枚举,因此您可以将它们合并在一起),指示设计时选择装饰器的显示方式(或不显示)。一旦您通过设计器限制了设计时的大小调整,您可以自己控制自己的大小vai。

我不确定大小调整方块是否合适,但MaximunSize和MinimumSize是适合您的值。 但是,在类的构造函数中设置它们是不够的,因为每次将控件的实例从设计器中拖放到表单中时,这些值都是在构造函数之后设置的

你应该:

覆盖MinummSize和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;
}


这些方法是Windows窗体设计工具的约定:

MinimumSize和MaximumSize有什么问题?一旦控件的实例被放到窗体上,这些值就会出现在属性浏览器中,因此用户可以覆盖它们。用于在有限尺寸内调整大小的装饰也仍然存在,使控件总体上有一种不专业的感觉。我还强烈建议下载Reflector。查看TrackBar(及其关联的TrackBarDesigner)的源代码,您可以收集它为获得所需行为所做的一切。
private void ResetMaximumSize()
{
    me.MaximumSize = maxSize;
}