Что мешает мне изменять размеры (уменьшать размер) моих окон?
У меня есть объект формы Windows, который содержит 3 объекта, древовидную структуру, richtextbox и tabcontrol. Они не состыкованы в форме окон, но они закреплены (сверху + слева).
Я написал код, чтобы изменить его размер при вызове обработчика событий формы-resize, но, похоже, он работает только для увеличения размера формы, т.е. я не могу изменять размер формы до Меньший размер. Это включает время, когда я сначала увеличиваю основную форму окна, а затем пытаюсь вернуть его в исходный размер.
Размеры трех объектов устанавливаются вручную после каждого изменения формы с помощью кода ниже:
treeView1.Height += (this.Height - oldHeight);
richTextBox1.Width += (this.Width - oldWidth);
tabControl1.Width += (this.Width - oldWidth);
tabControl1.Height += (this.Height - oldHeight);
oldHeight = this.Height;
oldWidth = this.Width;
Ни один из объектов не имеет заданного минимального размера (все они равны 0,0 в процессе изменения размера)
Что мешает изменять размер формы до меньшего размера?
Ответы
Ответ 1
Autosize (который был установлен на основном объекте Form) препятствовал уменьшению окна до размера, меньшего, чем объекты, содержащиеся в нем. Поскольку объекты в основной форме увеличивались при каждом расширенном изменении размера, основная форма не могла сжиматься после какого-либо изменения размера. отключив Autosize на основном объекте Form, я смог восстановить полный контроль над изменением размера.
Ответ 2
Если вышеуказанное не решит его, проверьте, что минимальный размер формы не установлен в значение, большее, чем вам нужно.
Ответ 3
Щелкните правой кнопкой мыши по вашей Winform в Visual Studio → выберите свойства → Автомасштабирование будет установлено True → Измените его на False
ИЛИ
Включите эту строку в свой код
this.AutoSize = false;
Ответ 4
Просто поместите все ваши Controls
в Panel
и установите для свойства Dock
значение Panel
на Fill
. Я считаю, что он работает даже с Autosize
, установленным в true.
Ответ 5
Может быть еще один способ исправить поведение формы, которая не может быть изменена с помощью обычного выбора мыши.
В связи с обсуждением выше я обнаружил [используя VB.net в VS2010], что одна из моих стандартных форм Windows не будет изменять размер с помощью мыши. Это как если бы FormBorderStyle был установлен в форму "Исправлено". Даже изменение FormBorderStyle в SizableToolWindow не дало ожидаемого мышечного поведения.
Вот некоторые настройки формы из дизайна формы. Свойства:
Autosize: false
AutoSizeMode: Ровно
Doublebuffered: true
Включено: true
FormBorderStyle: значимый
ImeMode: NoControl
Заблокировано: false
AutoScaleMode: Font
AccessibleRole: по умолчанию
Все видимые или кодовые свойства Свойства этой формы и все ее свойства свойств конструктора тоже были идентичны другим формам в том же проекте, которые позволили бы правильно изменить размер мыши. Очистка решения, а также восстановление его также не устранили проблему замороженной формы. Нажав "Максимизировать", вы сделали операцию "Свернуть". Размер формы может быть задан кодом, как ожидалось. Только изменение размера мыши в форме не функционировало должным образом.
Я обнаружил, что желаемое изменение размера мыши можно снова включить, установив в коде путем установки параметра:
myForm.AutoScaleMode = Windows.Forms.AutoScaleMode.Inherit
Этот параметр был настроен на "шрифт" в дизайне формы, который также использовался в других формах, которые работали правильно.
Затем... странно... изменив его обратно. Наследование в .Font в коде также позволило формам правильно изменить размер.
Этот параметр в коде (либо на .Inherit, либо на .Font), по-видимому, был критическим элементом для исправления проблемы изменения размера формы в этом случае. Кажется, есть скрытые параметры, которые система не показывает пользователю, которые каким-то образом мешают ожидаемой работе формы.