【问题标题】:Limit the size of a user control at design time在设计时限制用户控件的大小
【发布时间】:2016-07-06 22:00:10
【问题描述】:

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

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

这可能吗?

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

【问题讨论】:

  • 是在运行时调整大小,还是固定大小?
  • 已修复。目的是将基类用作已知屏幕尺寸的 Windows CE 设备的全屏表单模板,我希望能够在设计器中为其布局子控件。
  • 我的第二个答案对你没有用吗?
  • @jmservera:很抱歉,但没有...... :-(

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


【解决方案1】:

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

【讨论】:

  • SetBoundsCore 在 .Net CF 中不可用... :-(
  • 哎呀,抱歉,我没注意到是关于 CF 的
【解决方案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);
}

【讨论】:

  • 然后派生类可以直接覆盖 OnResize 而你什么也没做。
  • 是的,当然,但是您通常这样做是为了避免使用设计器错误地更改表单的大小,而不是束缚开发人员的手。请阅读它提出的问题:“它应该在 VS 设计器视图中具有固定大小”。
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

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

    此解决方案的工作属性。

    在用户控件的 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
        }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-10
      相关资源
      最近更新 更多