Ограничить размер пользовательского элемента управления во время разработки

2

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

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

Возможно ли это?

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

  • 1
    Это должно быть изменяемого размера во время выполнения, или фиксированный размер тогда тоже?
  • 0
    Исправлена. Цель состоит в том, чтобы использовать базовый класс в качестве шаблона для полноэкранной формы для устройства Windows CE с известным размером экрана, для которого я хочу иметь возможность размещать дочерние элементы управления в конструкторе.
Показать ещё 2 комментария
Теги:
visual-studio
user-controls
compact-framework
design-time

4 ответа

1
Лучший ответ

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

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

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

  • 0
    SetBoundsCore недоступен в .Net CF ... :-(
  • 0
    ой, извините, я не заметил, это было о CF
Показать ещё 1 комментарий
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);
}
  • 0
    А потом производный класс может просто переопределить OnResize, и вы ничего не добились.
  • 0
    Да, конечно, но вы обычно делаете это, чтобы избежать изменения размера формы по ошибке с помощью дизайнера, а не связывать руки разработчику. Пожалуйста, прочитайте вопрос, где он спрашивает: «он должен иметь фиксированный размер в представлении конструктора VS».
0

Предположим, что у нас есть кнопка, которая называется "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 обручем это решение будет достаточно для вас.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню