Когда вы создаете приложение на базе форм, то для дизайна пользовательского интерфейса применяются три отдельных инструмента Visual Studio: визуальный конструктор форм Forms Designer (который обеспечивает основу формы), панель инструментов Toolbox (содержащую элементы управления, которые будут размещаться на основе) и браузер свойств (который используется для изменения: формы; ее дочерних элементов управления; внешнего вида и поведения). Эта триада инструментов интегрированной среды разработки является ключом к быстрой разработке форм в Visual Studio (особенно в том, что касается создания содержимого формы).
Термин "элемент управления" технически обозначает любой объект .NET, который реализует класс Control. Практически же мы используем этот термин для обозначения визуальных элементов управления, находящихся в форме. В отличие от них компоненты не обладают визуальным интерфейсом (хотя имеют множество таких же характеристик, что и элементы управления). Кнопка — это пример элемента управления, а таймер — это пример компонента.
И элементы управления, и компоненты обитают в панели Toolbox (дополнительное описание Toolbox см. в главе 6). Добавление на форму элемента управления или компонента производится перетаскиванием соответствующего элемента из панели Toolbox на поверхность формы.
После того как вы поместили элемент управления на форму, визуальный конструктор форм Windows Forms Designer прорисует элемент управления на форме (для того чтобы вы получили представление WYSIWYG— то, как форма будет выглядеть на стадии выполнения). Как мы отмечали в главе 6, работа с компонентами производится несколько иначе. Визуальный конструктор форм имеет специальную область, называемую лотком компонентов (здесь представлены все размещенные на форме компоненты). Это позволяет вам работать с компонентами точно так же, как и с элементами управления (просто щелкая по ним), но при этом на форме не появляется их визуальное представление (поскольку компонент не имеет визуального представления).
Via рис. 15.5 выделена область лотка компонентов визуального конструктора форм.
Совет
Панель Toolbox можно настраивать: вы можете добавлять и удалять компоненты с любой вкладки Toolbox. Щелкните правой кнопкой мыши внутри окна Toolbox и выберите пункт Choose Items. После этого откроется диалоговое окно Choose Toolbox Items; здесь вы можете выбрать обитающие в Toolbox элементы управления. Если элемента управления нет на вкладках .NET Framework Components или COM Components, то вы можете перейти к сборке элемента управления и добавить его напрямую.
Компоновка и позиционирование элементов управления
Когда на форме находится несколько элементов управления,- то визуальный конструктор форм может помочь автоматизировать некоторые стандартные задачи компоновки, такие как выравнивание группы элементов управления по вертикали. Мы снова отсылаем вас к главе 6 за описанием способов использования этих инструментов повышения производительности. Однако эти функции компоновки хотя и являются удобными с точки зрения дизайна, но они ничего не дают вам на стадии выполнения.
Как уже отмечалось ранее, поведение элемента управления (внутри его родительской формы) во время выполнения является важным вопросом (если вы хотите реализовать вашу форму в соответствии с вашими проектными намерениями). То есть вам не только нужно, чтобы элементы управления выглядели определенным образом, но они еще должны и вести себя определенным образом при изменении размеров формы.
Самый простой способ продемонстрировать проблему изменения размеров формы — это рассмотреть несколько рисунков. На рис. 15.6 показана простейшая форма: метка, текстовое поле, кнопки ОК и Cancel. Элементы управления формы были тщательно размещены: выдержаны равные расстояния, элементы аккуратно выровнены по горизонтали и вертикали — короче говоря, эта форма выглядит именно так, как того хотел разработчик.
Рис. 15.6. Элементы управления на форме выровнены
Но затем в дело вступает пользователь. На рис. 15.7 показаны результаты изменения размеров формы по горизонтали и вертикали.
Этот вид— совершенно не то, что планировалось получить; четкий и аккуратный дизайн формы не справился с изменением её размеров. Возможно, пользователь изменил размеры формы в попытке получить больше места для ввода в текстовом поле. Либо пользователь упорядочил все окна приложений в мозаичном порядке, что и привело к изменению размера окна данного приложения. Какова бы ни была причина, совершенно ясно, что требуется дополнительное вмешательство разработчика для того, чтобы дизайн стал "правильным" (и не зависел от размера формы).
При помощи сравнения рисунков до, и после изменения размеров вы можете выработать стратегию и ответить на вопрос: "Что должно происходить при изменении размера формы пользователем?" На рис. 15.8 показан снимок идеального варианта; текстовое поле "последовало" за изменением размера (изменяя свою ширину в горизонтальном направлении). Командные кнопки сохранили свое выравнивание друг с другом и с текстовым полем, но не изменили своих общих размеров. Метка осталась в своем исходном положении.
Каждый объект формы имеет событие изменения размера, которое происходит при изменении размера границ формы (чаще всего это происходит в результате перетаскивания пользователем границы формы для увеличения или уменьшения ее размера). Поскольку каждый элемент управления имеет такие свойства позиционирования, как Top, Left, Height и Width, то для получения формы, показанной на рис. 15.8, можно было бы применить грубый силовой подход — написав несколько строк кода для каждого элемента управления, вы могли бы вручную переместить элементы управления или изменить их размер при изменении размера формы и положения других элементов управления. Однако такой подход как минимум трудоемок и дает весьма "хрупкий" код, который необходимо подправлять каждый раз, когда компоновка и расположение элементов управления модифицируются.
К счастью, визуальный конструктор Windows Forms в Visual Studio (в сочетании с некоторыми стандартными свойствами элементов управления) позволяет вам учитывать все возможные оптимизации изменения размера уже при компоновке формы. При помощи привязки (anchoring) и закрепления (docking) ваших элементов управления вы можете указать их положение относительно друг друга и относительно границ формы.