C# 在设计时限制用户控件的大小
我有一个命名空间C# 在设计时限制用户控件的大小,c#,visual-studio,compact-framework,user-controls,design-time,C#,Visual Studio,Compact Framework,User Controls,Design Time,我有一个命名空间Company.UI.Forms,其中有一个表单基类BaseForm,它继承自System.Windows.Forms.form 我需要限制此表单的大小,以便如果具体表单(例如ExampleForm)派生自BaseForm,则它在VS designer视图中应该具有固定的大小。应该以某种方式(在BaseFormctor?)设置或定义固定大小,以便派生的ExampleForm和设计者选择它 可能吗 [编辑]目的是将基类用作已知屏幕大小的Windows CE设备的全屏表单模板,我希望
Company.UI.Forms
,其中有一个表单基类BaseForm
,它继承自System.Windows.Forms.form
我需要限制此表单的大小,以便如果具体表单(例如ExampleForm
)派生自BaseForm
,则它在VS designer视图中应该具有固定的大小。应该以某种方式(在BaseForm
ctor?)设置或定义固定大小,以便派生的ExampleForm
和设计者选择它
可能吗
[编辑]目的是将基类用作已知屏幕大小的Windows CE设备的全屏表单模板,我希望能够在设计器中为其布局子控件。我不认为有任何直接支持此类场景。子窗体可以覆盖控制窗体上最大大小的所有值。因此,无法从属性角度对其进行约束
我能想到的唯一方法是重写size changed方法,并将大小重置为max size(最大大小)。不过,这可能会产生一些不良影响,您应该在将其作为解决方案解决之前将其过期 在标准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,是因为您指定在设计时,如果您不想在运行时调整大小,也可以将其删除。好的,现在对于CF,quick solution,您可以通过在字段中存储大小来执行更干净的代码
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);
}
假设我们在usercontrol中有一个名为“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
}
我的英语不好。我认为这个解决方案对您来说已经足够了。
SetBoundsCore
在.Net中不可用CF.:-(哦,对不起,我没有注意到这是关于CFIT的,它在运行时是可调整大小的,还是固定大小的?已修复。其目的是将基类用作已知屏幕大小的Windows CE设备的全屏窗体的模板,我希望能够在设计器中布局子控件。我的第二个答案对您有用吗?@jmservera:很抱歉,但是没有…:-(然后派生类就可以重写OnResize,而您什么也没做。是的,当然,但是您通常这样做是为了避免使用设计器错误地更改表单的大小,而不是束缚开发人员的手。请阅读问题,它会问:“在VS designer视图中应该有一个固定的大小”。