Как установить «предпочтительный размер» для формы? - PullRequest
2 голосов
/ 05 декабря 2009

У меня есть некоторые элементы управления в форме, и я закрепил их слева и справа от формы, чтобы гарантировать, что они растут и уменьшаются вместе с формой. Моя форма также настроена на автоматическое увеличение и уменьшение, чтобы вместить некоторые метки, которые могут содержать длинные строки. Когда эти метки удалят свои длинные строки, я хочу, чтобы моя форма вернулась к той ширине, на которой она была раньше. Упомянутые элементы управления, закрепленные слева и справа на моей форме, по-видимому, препятствуют этому. Могу ли я заставить его работать так, как я собираюсь?

Ответы [ 5 ]

8 голосов
/ 09 декабря 2009

Вот способ, который не требует написания какого-либо кода для определения размера ... но предполагает, что все ваши кнопки находятся внизу.

Шаг 1. Установите минимальный размер для диалога.

Шаг 2. Создайте панель на форме.

Шаг 3. Переместите свои кнопки в панель.

Шаг 4. Прикрепите панель к нижней части формы.

Шаг 5. Убедитесь, что для диалогов AutoSizeMode установлено значение ShrinkAndGrow

С помощью этой техники вы можете прикрепить панели к любой из левой, правой, верхней и нижней границ. и изменить размер диалогового окна.

4 голосов
/ 14 декабря 2009

Могу ли я предложить вам не сделать это? Я знаю, что вы пытаетесь быть полезными для своих пользователей, но случайное сокращение окна (вероятно, оно будет казаться случайным для пользователя) может привести к путанице и, возможно, разочарованию. Это, вероятно, еще более актуально с новой функцией пользовательского интерфейса Windows 7 Aero Snap, то есть вы закрепляете окно слева, а затем оно меняет свой размер.

Считайте размер окна предпочтением пользователя. Пользователь уже сказал вам, насколько они хотят, чтобы вещь была, уважайте ее!

Изменить: Я должен также добавить, что есть ошибка, если вы идете по этому маршруту. Представьте, что форма имеет ширину 1000 пикселей, и пользователь перетаскивает ее на (-500, 100), чтобы отобразить ее на своем мониторе наполовину. Если они нажимают на видимую кнопку (или, что еще хуже, что-то происходит на заднем плане!) И размер формы уменьшается до 450 пикселей, окно просто исчезает! Пользователь видит его на панели задач, но не может получить к нему доступ, если не знает некоторых причудливых сочетаний клавиш alt + space.

4 голосов
/ 05 декабря 2009

Попробуйте использовать элемент управления TableLayoutPanel или Flowlayoutpanel.
http://msdn.microsoft.com/en-us/library/system.windows.forms.tablelayoutpanel.aspx
http://visualbasic.about.com/od/usingvbnet/a/tloflopnl.htm

0 голосов
/ 14 декабря 2009

использовать System.Drawing.Graphics.MeasureString

    public SizeF MeasureString(string text, Font font, int width);

текст = yourtext; шрифт = fontofthelabel; ширина = maxwidthoflabel;

MeasureString в MSDN

Вы можете Google для более

0 голосов
/ 08 декабря 2009

Одним из предложений было бы подключить событие OnPaint. К этому моменту ваши элементы управления будут построены, и их начальные значения местоположения будут установлены в форме. Захватите все, что вы хотите, в объект, установленный как частный на уровне формы.

Во время события OnStringsRemoved прочитайте ваш объект и установите все обратно, как было. Изменение привязанного элемента управления должно привести к изменению размера формы, но, возможно, вам придется установить все вручную. Может также случиться так, что изменение формы сократит элементы управления, а не наоборот.

Альтернативным предложением было бы просто жестко закодировать ваши начальные значения и каждый раз возвращаться к ним. Я лично выбрал бы OnPaint. Это поможет вам обрабатывать такие вещи, как крупные шрифты, увеличивающие размер элемента управления, или все, что делает фреймворк до того, как его увидит пользователь.

...