У меня есть форма с некоторыми элементами управления. (На самом деле, это своего рода постоянная проблема.) Некоторые из форм, которые я имел, имеют изменяемый размер, некоторые нет. Независимо от того, когда форма отображается, было бы хорошо, чтобы она отображалась в необходимом «минимальном» размере. Другие наборы инструментов для работы с окнами, такие как wxWidgets (wxWindow :: GetMinSize) и Qt (QWidget ::imumSize), имеют эту функциональность.
Эта функциональность, если вы с ней не знакомы, позволяет окну изменять размер до минимального размера, который часто является всем необходимым для окна, и выглядит довольно красиво. Если у меня есть два статических текста и два поля редактирования, выложенные таким образом:
Username:
[ Edit/text box for user's password]
Password:
[ Edit/text box for user's password]
[ Cancel ][ OK ]
Затем я могу указать этой форме изменить ее размер до «минимального размера», и она будет выглядеть так же, как указано выше. (Минимальная ширина в текстовом поле частично субъективна - я должен был бы установить это сам в одном / обоих текстовых полях, но форма будет запрашивать дочерние элементы управления и узнавать об этой минимальной ширине)
Обычно это сочетается с какими-то макетами. (Который .Net имеет.)
Это дает дополнительное преимущество, заключающееся в том, что форма имеет правильный размер независимо от настроек шрифта, локали, dpi, обложки графического интерфейса и т. Д. (Если все сделано правильно, по крайней мере.)
Существует ли это в .Net, и если да, то где? Если вам нужно больше описания, спросите, и я буду рад предоставить.
Edit: я ищу приведенный выше пример, изменяемый размер только в направлении X (я готов принять оба), но не может быть изменен размер меньше, чем определенный W / H. Элементы управления должны быть привязаны - т.е. текстовые поля становятся больше, кнопки остаются выровненными по правому краю.
Редактировать: я могу делать изображения! Предположительно они стоят тысячи слов:
альтернативный текст http://www.freeimagehosting.net/uploads/79e9ee10e5.png
Редактировать: Полагаю, я начну отмечать ответы. От ответа Хенка меня довольно далеко задел диалоговое окно без изменения размера, соответствующее его содержанию. Большинство постов, представленных ниже, являются ценными, но они упускают суть (разве я здесь действительно не в курсе?): Я понимаю, как использовать Anchor / TableLayout и получить элементы управления для потока - в основном это было одно или оба измерения диалог, чтобы соответствовать содержанию диалога. По сути, у вас есть три случая:
Диалог не изменяемого размера - см. Ответ Хенка. В сочетании с TableLayout и Anchors вы получите приличный диалог.
Размер диалогового окна можно изменять только в одном измерении - перейдите с 1 или 3 - Вы можете ограничить измерение с помощью события Resize, но диалоговое окно ужасно мерцает. (Насколько я могу судить, это кажется недостатком в Win32 - есть некоторые вещи о переопределении фонового стирания, которое работает для элементов управления, но не для окон, так как вы получите артефакты на фоне формы (потому что вы не стираю их). Реальный ответ заключается в том, что это, вероятно, должно быть обработано самой Win32 - мне не нужно изобретать колесо двойного буфера просто для того, чтобы получить приличный диалог взгляда ...))
Диалог полностью изменяемого размера. Якоря и TableLayout ваш друг. К сожалению, атрибут MinimumSize кажется фальшивым (по крайней мере, я не знаю, для чего он ...) - например, если вы запрашиваете MinimumSize текстового поля, по умолчанию высота составляет 4 пикселя. Кроме того, свойство MinimumSize, по-видимому, не распространено - элемент управления не запрашивает своих детей. (Я могу изменить размер формы меньше, чем текстовое поле внутри формы, и тогда текстовое поле будет за пределами формы.) Если вам интересно, о чем я болтаю, посмотрите wxWidgets и как работают макеты и минимальный размер.
С тех пор я также обнаружил, что .Net, похоже, не уважает системный шрифт и всегда использует один и тот же шрифт для форм, поэтому изменения шрифта не повлияют на мой диалог (к сожалению), что облегчает большинство моих забот (к счастью) ?). Опять же, обратитесь к тому, как это делает wxWidgets - если системный шрифт 22pt, все wxFrames (формы) уважают и изменяют размеры соответственно. .Net должен попасть в этот поезд ... (И я знаю человека, который ежедневно использует шрифт 22 + pt для своего стандартного шрифта GUI.)