Что мешает мне изменять размеры (уменьшать размер) моих окон?

У меня есть объект формы 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), по-видимому, был критическим элементом для исправления проблемы изменения размера формы в этом случае. Кажется, есть скрытые параметры, которые система не показывает пользователю, которые каким-то образом мешают ожидаемой работе формы.