2

我有一个命名空间Company.UI.Forms,我们有一个BaseForm继承自System.Windows.Forms.Form.

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

那可能吗?

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

4

4 回答 4

3

在标准 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 是因为您指定在设计时,如果您不想在运行时调整大小,也将其删除。

于 2009-06-24T12:46:17.383 回答
2

好的,现在对于 CF,快速解决方案,您可以通过将 Size 存储在字段中来做一个更简洁的代码......

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);
}
于 2009-06-24T12:58:58.153 回答
1

我不相信这种场景有任何直接支持。所有控制表单最大尺寸的值都可以被子表单覆盖。因此,没有办法从属性的角度对其进行限制。

我能想到的唯一方法是覆盖 size changed 方法并将大小重置为最大大小(如果它超过)。不过,这可能会产生一些不良影响,您应该在将其作为解决方案之前将其过期。

于 2009-06-24T12:33:02.310 回答
0

假设我们在用户控件中有一个名为“button1”的按钮。我想在设计时更改用户控件的大小,按钮 1 的大小与用户控件的大小相适应。

此解决方案的工作属性。

在 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
    }

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

于 2013-04-16T22:24:53.050 回答