У меня есть пространство имен Company.UI.Forms
, где у нас есть базовый класс формы BaseForm
, который наследуется от System.Windows.Forms.Form
.
Мне нужно ограничить размер этой формы, так что если конкретная форма, например ExampleForm
, происходит от BaseForm
, она должна иметь фиксированный размер в представлении конструктора VS. Фиксированный размер должен быть определен или определен каким-либо образом (в BaseForm
ctor?), Чтобы производный ExampleForm
и дизайнер его подбирали.
Возможно ли это?
[Изменить] Цель состоит в том, чтобы использовать базовый класс в качестве шаблона для полноэкранной формы для устройства Windows CE с известным размером экрана, для которого я хочу иметь возможность размещать дочерние элементы управления в дизайнере.
Я не верю, что существует прямая поддержка такого типа сценариев. Все значения, которые определяют максимальный размер формы, могут быть переопределены дочерней формой. Следовательно, нет способа ограничить его с точки зрения собственности.
Единственный способ, о котором я могу думать, это переопределить метод с измененным размером и reset размер до максимального размера, если он когда-либо закончится. Это может иметь некоторые плохие последствия, хотя и вы должны истечь с ним, прежде чем решиться на него как на решение.
В стандартных 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, быстрое решение, вы можете сделать более чистый код, сохранив 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);
}
Предположим, что у нас есть кнопка, которая называется "button1" в usercontrol. Я хочу, изменяя размер пользовательского контроля во время разработки, размер кнопки 1 будет соответствовать размеру usercontrol.
это свойство работы с решением.
в событии Resize usercontrol напишите это.
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
}
мой английский язык не хорош .i обручем это решение будет достаточно для вас.