我有一个名称空间Company.UI.Forms
,其中我们有一个继承自BaseForm
的表单基类System.Windows.Forms.Form
。
我需要限制此表单的大小,因此如果具体表单(例如ExampleForm
)派生自BaseForm
,则它应该在VS设计器视图中具有固定大小。固定大小应该以某种方式设置或定义(在BaseForm
ctor?中),以便派生的ExampleForm
和设计者选择它。
这可能吗?
[编辑]目的是使用基类作为已知屏幕大小的Windows CE设备的全屏窗体的模板,我希望能够在设计器中布置子控件。
答案 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
}
我的英语不好。我这个解决方案对你来说足够了。