在设计时限制用户控件的大小

时间:2009-06-24 12:28:02

标签: c# visual-studio compact-framework user-controls design-time

我有一个名称空间Company.UI.Forms,其中我们有一个继承自BaseForm的表单基类System.Windows.Forms.Form

我需要限制此表单的大小,因此如果具体表单(例如ExampleForm)派生自BaseForm,则它应该在VS设计器视图中具有固定大小。固定大小应该以某种方式设置或定义(在BaseForm ctor?中),以便派生的ExampleForm和设计者选择它。

这可能吗?

[编辑]目的是使用基类作为已知屏幕大小的Windows CE设备的全屏窗体的模板,我希望能够在设计器中布置子控件。

4 个答案:

答案 0 :(得分:2)

在标准的WinForms中,您可以覆盖SetBoundsCore方法。此代码将阻止基类在设计时更改它...但请记住,任何继承的类都可以覆盖它:

protected override void SetBoundsCore(int x, int y,
     int width, int height, BoundsSpecified specified)
{
  if (this.DesignMode)
    base.SetBoundsCore(x, y, 500, 490, specified);
  else
    base.SetBoundsCore(x, y, width, height, specified);
}

我已将if指定为设计时,如果您不想在运行时调整大小并将其删除。

答案 1 :(得分:2)

好的,现在对于CF,快速解决方案,你可以通过在一个字段中存储大小来做一个更干净的代码......

public BaseForm()
{
 InitializeComponent();
 this.Size=new Size(20,20);
}


bool resizing;

protected override void OnResize(EventArgs e)
{   
 if(!resizing)
 {
   resizing = true;
   try
   {
     this.Size = new Size(20, 20);
   }
   finally
   {
     resizing = false;
   }
 }
 else
   base.OnResize(e);
}

答案 2 :(得分:1)

我不相信这种情况有任何直接支持。控制窗体上最大大小的所有值都可以被子窗体覆盖。因此,没有办法从财产的角度来约束它。

我能想到的唯一方法是覆盖尺寸更改方法,并将尺寸重置为最大尺寸(如果它已经过去)。这可能会产生一些不良影响,在你作为解决方案解决之前,你应该使用它。

答案 3 :(得分:0)

假设我们在usercontrol中有一个名为“button1”的按钮。 我想,在设计时更改usercontrol大小,button1的大小与usercontrol的大小相邻。

此解决方案的工作属性。

在usercontrol的Resize事件中写下这个。

 private void ButtonDesigned_Resize(object sender, EventArgs e)
    {            
        button1.Size = new Size(this.Size.Width - 2, this.Size.Height - 2); 

         // Note :  this.size hint to usercontrol size 

         or

        button1.Size = this.Size
    }

我的英语不好。我这个解决方案对你来说足够了。