Читать «ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание» онлайн - страница 552

Эндрю Троелсен

public partial class MainWindow: Form {

 private string userMessage = "Default Message";

 private bool textIsItalic = false;

 …

 private void configureToolStripMenuItem_Click(object sender, EventArgs e) {

  ItalicUserMessageDialog dlg = new ItalicUserMessageDialog();

  dlg.Message = userMessage;

  dlg.Italic = textIsItaliс;

  // Если пользователь щелкнул на OK, отобразить сообщение.

  if (DialogResult.OK == dlg.ShowDialog()) {

   userMessage = dlg.Message;

   textIsItalic = dlg.Italic;

   Invalidate();

  }

  // Лучше, чтобы очистку внутренних элементов выполняло само

  // диалоговое окно, не дожидаясь сборщика мусора. dlg.Dispose();

 }

 private void MainWindow_Paint(object sender, PaintEventArgs e) {

  Graphics g = e.Graphics;

  Font f = null;

  if (textIsItalic) f = new Font("Times New Roman", 24, FontStyle.Italic);

  else f = new Font("Times New Roman", 24);

  g.DrawString(userMessage, f, Brushes.DarkBlue, 50, 50);

 }

}

Исходный код. Проект SimpleModalDialog размещен в подкаталоге, соответствующем главе 21.

Динамическое позиционирование элементов управления Windows Forms

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

При создании формы, содержащей элементы управления пользовательского интерфейса, вы должны решить, должна ли форма позволять изменение размеров ее окна. Обычно главное окно допускает изменение размеров, тогда как диалоговые окна – нет. Напомним, что допустимость изменения размеров формы задается свойством FormBorderStyle. которое может принимать любое из значений перечня FormBorderStyle.

public enum System.Windows.Forms.FormBorderStyle {

 None, FixedSingle, Fixed3D,

 FixedDialog, Sizable,

 FixedToolWindow, SizableToolWindow

}

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

Свойство Anchor

В Windows Forms свойство Anchor используется для определения относительной фиксированной позиции, в которой всегда должен пребывать данный элемент управления. Каждый производный от Control тип имеет свойство Anchor, которое может принимать любое из значений перечня AnchorStyles, описанных в табл. 21.13.