Центрирующие элементы при изменении размеров окон в VB6 - PullRequest
1 голос
/ 03 марта 2011

Я создаю приложение в VB6, где стандартный размер формы составляет 1024x768, для более старых мониторов, которые его увидят.У некоторых пользователей, однако, будут доступны более высокие разрешения, и я бы хотел, чтобы программа по-прежнему выглядела хорошо, когда они максимизируют экран.Я вообще не хочу изменять размеры элементов в форме, но я стремлюсь изменить все.На мой взгляд, есть два варианта, и мне не нравится ни один из них:

  • _real_, написание динамического кода, который поместит каждый элемент в форму по отношению к другим элементам,так что, независимо от того, какой у него размер, они всегда будут правильно центрироваться.
  • Более простой, но более приятный способ - поместить все элементы в 1024x768 PictureBox и просто центрировать его на экране при каждом изменении размера формы.

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

Кто-нибудь знает какие-нибудь магические решения?

В настоящее время я склоняюсь к PictureBox только потому, что перспектива написания и, несомненно, переписывания всего этого кода позиционирования удручает.Проблема здесь в том, что у меня уже есть эти 50+ элементов в форме, но мне нужно, чтобы они были в PictureBox.Я могу копировать и вставлять без создания массива, который он всегда хочет создать, но тогда мне нужно будет переименовать их все ... поэтому мой второй вопрос, есть ли какой-нибудь простой способ перенести существующий элемент наформа в PictureBox?

Спасибо всем!

Ответы [ 3 ]

3 голосов
/ 04 марта 2011

Нет бесплатного обеда.Если вы хотите, чтобы ваше приложение VB6 "выглядело хорошо" при изменении размера, у вас есть для записи логики динамического определения размера в событии Form_Resize.В противном случае, как уже говорили другие, у вас будут большие серые области со всем забитым в верхнем левом углу.Центрирование в PictureBox не намного лучше.В любом случае, это будет выглядеть нестандартно и непрофессионально.

Я написал этот тип кода для нескольких приложений VB6.Я согласен, что это немного утомительно писать, но это не сложно.Вам просто нужно подумать о:

  • Позиционирование кнопок - нижние правые координаты вашей формы изменятся, и кнопки обычно располагаются вдоль правой стороны или относительно правого нижнего угла.
  • Изменение размера элемента управления отображением - вы можете расширить списки, многострочные текстовые поля, раскрывающиеся списки и т. Д. Ваш код может решить, должен ли он быть в процентах от новой ширины / высоты формы, или должен расширяться, чтобы заполнить то, что осталось после вас.позиционировал все остальное.Я думаю, что последний подход работает лучше, но это зависит от приложения.
  • Поле между элементами управления и краями формы, а также поле между элементами управления.Я определяю значение с именем «Gutter» для хранения этого значения, а затем применяю его по мере необходимости при расположении, скажем, ряда кнопок по горизонтали относительно нижнего правого угла.
  • Не изменить размер кнопок или надписей, просто изменить положение их.
  • Не изменять размер шрифтов.

"Якорь"свойства типа делают этот тип кода ненужным в VB.NET.Если вы задумаетесь об этом на минуту, вы увидите, что если несколько свойств могут обрабатывать эту логику, строки кода, необходимые для того же, не могут быть такими сложными.После того, как у вас есть первый и позиционированный элемент управления, вы можете расположить другие элементы управления сверху, слева, по ширине и высоте этого элемента управления и просто пройтись по форме.

Когда вы все сделаете правильно, ядумаю, вы обнаружите, что это действительно стоит усилий.

2 голосов
/ 03 марта 2011

Если элементы не могут изменить размер или положение по отношению друг к другу, я бы, вероятно, выбрал подход PictureBox.Я не понимаю, как это было бы плохо на самом деле.

Если необходимо изменить размеры или переместить элементы управления, я бы (и, как Бог знает, я раньше) писал множество кодов изменения размера ...

1 голос
/ 03 марта 2011

http://www.functionx.com/vbnet/Lesson08.htm

Посмотрите на Контроллеры.Как я отметил в комментарии, второе решение, которое вы описали, не является специальным - оно организовано.Пользовательский интерфейс это все о контейнерах.

Вы правы в том, что чувствуете неприязнь к PictureBox.

...