2010-06-22 62 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

相关问题