воскресенье, 17 апреля 2011 г.

Формы в Visual Studio

Формы – это главный элемент визуального отображения в технологии Windows Forms, как не трудно догадаться из названия этой технологии. Вообще, вся операционная система Windows («Окна») построена по оконной системе, они отошли от консольных приложений. Поэтому, при программировании Win32 приложений в системе Visual Studio – необходимо хорошо разбираться в тех свойствах, который можно изменять у форм. Этим и займемся.

Но – пока не начали, немного расскажу о политике, ведь ей сейчас можно увлекаться. Вы знаете кто является учредителем и президентом компании Krull Corp? А я знаю, если по ссылке перейдете - то и вы узнаете. Почитайте биографию Александра Мирчева, может быть - тоже захотите вложить свои деньги куда-нибудь. А я пока - перейду к статье.

Для начала – один из самых главных моментом (по моему мнению) – это определение места отображения окна. Обычно оно появляется где попало на экране – а я хочу, чтобы оно появлялось строго по середине. Для этого находим свойство формы StartPosition и там выбираем значение CenterScreen, теперь данное окно у нас будет появляться по центру экрана. Если вы вызываете одну форму из другой (по нажатии на кнопку), то вызываемая форма должна (я, по крайней мере, всегда так делаю) по середине вызвавшей формы. Для этого нужно у того же свойства StartPosition вызываемой формы выбрать значение CenterParent – и оно будет всегда появляется по середине вызвавшей ее формы.

Теперь давайте вспомним виды окон. Они бывают разные, но – я говорю про обычные и диалоговые окна. Диалоговые появляются, чаще всего, для ввода от пользователя каких-либо значений. Эти диалоговые окна не исчезают, пока пользователь не закроет их, доступа к другим окнам программы (при активном диалоговом окне) нету.


Для понимания этого создайте проект в Visual Studio, киньте две формы. На главную форму положите кнопку, в обработчике нажатия этой кнопки введи вот такой вот простой код (Form2 – это имя второй формы):

        Form2.ShowDialog()

И запустите приложение. Теперь, если вы нажмете на кнопку, у вас появится вторая форма, а к первой вы вернуться не сможете, пока не закроете вторую.

Вообще, чтобы отобразить окно, нужно написать его название, поставить точку – и ввести команду – либо Show() – это обычное отображение, либо ShowDialog() – это диалоговое отображение. Других видов я не знаю. Также, чтобы диалоговое окно не отображалось в панели задач – нужно у этого диалогового окна найти свойство ShowInTaskBar и присвоить ему значение False. Теперь можете проверить программу, нажав на сочетание Alt+TAB.

Теперь вернитесь к свойствам первой формы (вторую форму вообще можете удалить). Иногда возникает потребность в том, чтобы у формы отображался только крестик в правом верхнем углу (то есть – форму нельзя ни максимизировать, ни сворачивать). Чтобы сделать это, необходимо найти свойство FormBorderStyle:


По умолчанию значение там = Sizable. Но – все это можно менять. Поупражняйтесь сами, но – я обычно ставлю SizableToolWindow – только закрытие окна.

Но – можно на форме просто отключить кнопку максимизации окна. Для этого задайте свойству MaximizeBox значение True. И проверьте работу программы (FormBorderStyle должен быть установлен в Sizable). Тоже можно сделать и с кнопкой сворачивания формы в трей, для этого свойству MinimizeBox задайте значение False.

Также можно у формы менять иконку (изображение сверху слева окна). Для этого – найдите свойство с говорящем названием Icon, нажмите на кнопку с тремя точками – и в открывшемся обозревателе найдите необходимую вам иконку.

И еще о двух свойствах расскажу. Но – перед этим поместите на форму две кнопки, назовите их B_OK и B_Cancel. Теперь найдите у формы свойство AcceptButton, нажмите на кнопку выбора значений – можно будет выбрать из двух наших кнопок. Выберите B_OK. В свойстве AcceptButton указывается кнопка по умолчанию, то есть та, обработчик нажатия которой будет запускаться при нажатии пользователем кнопки Enter.

А если вам нужно автоматически обрабатывать кнопку Escape – чтобы окно закрывалось, то для этого есть свойство CancelButton. Таким же образом выберете кнопку B_Cancel, в обработчике ее напишите код закрытия окна. Теперь, если вы нажмете кнопку Escape – то у вас форма автоматически закроется. Очень подходит для диалоговых окон.

9 комментариев:

  1. я в Visual Studio, можно сказать только 2 дня как сижу, но что-то просто так показать форму не получается. В общем есть 2 формы: Form1, Form2. На Form1 кнопка с обработчиком события на клик. В обработчике пишу:
    Form2.Show();
    Получаю Error: "Ошибка 1 Для нестатического поля, метода или свойства System.Windows.Forms.Control.Show()" требуется ссылка на объект"
    Как так? :)

    ОтветитьУдалить
  2. А как ты формы эти создал? Обычным способом?

    ОтветитьУдалить
  3. >>А как ты формы эти создал? Обычным способом?
    Естественно, необычным-то я пока ещё не умел. Да уже в принципе разобрался что к чему. Перед
    Form2.ShowDialog()
    надо ещё Form2 определить. В C# Form1, Form2 и т.д. это не переменные, а классы-потомки от Form - отсюда и все проблемы были :). Кстати предыдущая строчка кода открывает окно и владельцем ставит текущее активное, а если , например, так вызывать из Form1:
    Form2.ShowDialog(Form3)
    то владельцем окажется Form3, а не Form1 как в предыдущем случае.

    ОтветитьУдалить
  4. надо
    Form 2 F2= new Form 2 ();
    F2.Show();

    ОтветитьУдалить
  5. My.Forms.Form2.Show()
    Все гениально и просто

    ОтветитьУдалить
  6. как сделать чтобы при нажатии на кнопку она окрашивалась в другой цвет?

    ОтветитьУдалить
    Ответы
    1. Button1.BackColor = Color.Blue
      Color.Blue - это цвет, выбирай из выпадающего списка тот, что тебе нужен.
      Button1 - это название кнопки.

      Удалить
  7. я так и не понял как прикрутить дочернее окно к кнопке, админ подскажи как это делается, весь инет облазил не нашел, сам тоже не могу найти в Visual studio 2010 хочу тупо попробовать по событию Click на кнопке, вызвать второе окно.

    ОтветитьУдалить
    Ответы
    1. Добавь в проект новою форму (окно) - в Solution Explorer надо нажать правой клавишей мыши по названию проекты, выбрать пункт "Add" и добавить новую форму.
      Затем в обработчике кнопки написать:
      Form2.Show()
      Где Form2 - это вторая (только что добавленная) форма.
      Должно работать.

      Удалить