Ограничить размер пользовательского элемента управления во время разработки - PullRequest
2 голосов
/ 24 июня 2009

У меня есть пространство имен Company.UI.Forms, где у нас есть базовый класс форм BaseForm, который наследуется от System.Windows.Forms.Form.

Мне нужно ограничить размер этой формы, чтобы, если конкретная форма, скажем, ExampleForm, была получена из BaseForm, она имела фиксированный размер в представлении конструктора VS. Фиксированный размер должен быть задан или определен каким-либо образом (в BaseForm ctor?), Чтобы производный ExampleForm и дизайнер подняли его.

Это возможно?

[Edit] Цель состоит в том, чтобы использовать базовый класс в качестве шаблона для полноэкранной формы для устройства Windows CE с известным размером экрана, для которого я хочу иметь возможность размещать дочерние элементы управления в конструкторе.

Ответы [ 4 ]

2 голосов
/ 24 июня 2009

В стандартных 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, потому что вы указали время разработки, если вы не хотите изменять размер во время выполнения, удалите его.

2 голосов
/ 24 июня 2009

Хорошо, теперь для 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);
}
1 голос
/ 24 июня 2009

Я не верю, что есть прямая поддержка для этого типа сценария. Все значения, которые определяют максимальный размер формы, могут быть переопределены дочерней формой. Следовательно, нет способа ограничить его с точки зрения собственности.

Единственный способ, которым я могу придумать, это переопределить метод изменения размера и сбросить размер до максимального размера, если он когда-либо будет превышен. Это может иметь некоторые негативные последствия, и вы должны истечь его, прежде чем принять решение в качестве решения.

0 голосов
/ 17 апреля 2013

при условии, что у нас есть кнопка с именем «button1» в пользовательском контроле. Я хочу, чтобы при изменении размера пользовательского контроля во время разработки размер кнопки 1 соответствовал размеру пользовательского контроля.

свойство работы этого решения.

в событии 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
    }

мой английский язык не очень хороший. Я думаю, вам хватит этого решения.

...