netlib.narod.ru< Назад | Оглавление | Далее >

Флажок

Следующий элемент управления — флажок — состоит из маленького прямоугольника и текстовой строки. При щелчке по элементу управления (или нажатии пробела, когда элемент имеет фокус ввода) в прямоугольнике появляется отметка. Если еще раз щелкнуть по элементу управления, отметка исчезает. В отличие от кнопок флажок сохраняет свое состояние (включен/выключен).

Два важнейших свойства CheckBox:


Свойства CheckBox (выборочно)



Тип Свойство Доступ Описание

bool Checked Чтение/запись По умолчанию равно false
bool AutoCheck Чтение/запись По умолчанию равно true


Свойство Checked определяет, отмечен ли элемент управления. Его можно использовать как для инициализации элемента, так и для выяснения его состояния. Скорее всего вам не придется менять значение по умолчанию свойства AutoCheck, так как при таком значении этого свойства элемент управления CheckBox сам меняет свое состояние при щелчках по нему.

Элемент управления вызывает событие CheckedChanged всякий раз при изменении свойства Checked.


События CheckBox (выборочно)



Событие Метод Делегат Аргументы

CheckedChanged OnCheckedChanged EventHandler EventArgs


Событие CheckedChanged вызывается в двух случаях: когда пользователь щелкает по элементу управления CheckBox при свойстве AutoCheck, установленном в true, и при программном изменении свойства Checked — например, при инициализации элемента.

Если вы присвоите AutoCheck значение false, вам придется установить обработчик события Click элемента управления. Обработка события Click скорее всего будет содержать такие инструкции, переключающие отметку:

  CheckBox chkbox = (CheckBox)obj;
  chkbox.Checked ^= true;

He переключайте свойство Checked в обработчике события CheckedChanged! Если же это сделать, каждое переключение будет снова вызывать событие CheckedChanged — до бесконечности...

Следующая программа создает 4 элемента управления CheckBox, позволяющих задать 4 атрибута шрифта: полужирный, курсив, подчеркнутый и перечеркнутый.

CheckBoxDemo.cs

  //---------------------------------------------
  // CheckBoxDemo.cs (C) 2001 by Charles Petzold
  //---------------------------------------------
  using System;
  using System.Drawing;
  using System.Windows.Forms;

  class CheckBoxDemo: Form
  {
      public static void Main()
      {
          Application.Run(new CheckBoxDemo());
      }
      public CheckBoxDemo()
      {
          Text = "CheckBox Demo";

          CheckBox[] achkbox  = new CheckBox[4];
          int        cyText   = Font.Height;
          int        cxText   = cyText / 2;
          string[]   astrText = {"Bold", "Italic", "Underline", "Strikeout"};

          for (int i = 0; i < 4; i++)
          {
              achkbox[i] = new CheckBox();
              achkbox[i].Text = astrText[i];
              achkbox[i].Location = new Point(2 * cxText, 
                                              (4 + 3 * i) * cyText / 2);
              achkbox[i].Size = new Size(12 * cxText, cyText);
              achkbox[i].CheckedChanged += 
                             new EventHandler(CheckBoxOnCheckedChanged);
          }
          Controls.AddRange(achkbox);
      }
      void CheckBoxOnCheckedChanged(object obj, EventArgs ea)
      {
          Invalidate(false);
      }
      protected override void OnPaint(PaintEventArgs pea)
      {
          Graphics    grfx = pea.Graphics;
          FontStyle   fs   = 0;
          FontStyle[] afs  = { FontStyle.Bold,      FontStyle.Italic, 
                               FontStyle.Underline, FontStyle.Strikeout };

          for (int i = 0; i < 4; i++)
              if (((CheckBox) Controls[i]).Checked)
                  fs |= afs[i];

          Font font = new Font(Font, fs);
          grfx.DrawString(Text, font, new SolidBrush(ForeColor), 0, 0);
      }
  }

Я определил массив элементов управления CheckBox так, что я могу использовать метод AddRange свойства Controls. Переменная cyText содержит высоту свойства Font формы (и, соответственно, элемента управления). Я присваиваю переменной cxText вдвое меньшее значение, грубо вычисляя примерную ширину символов в нижнем регистре. Эти переменные позволяют задать свойства Location и Size каждого элемента управления. Хотя высота каждого элемента управления устанавливается в cyText, расстояние между элементами управления составляет 150% от этой величины. Ширины, равной cxText * 12, хватает для текста и прямоугольника с отметкой. Вот как это выглядит:


Рис. 12.12.

В обработчике события CheckedChanged форма делается недействительной, что приводит к вызову OnPaint. Метод OnPaint осуществляет доступ по индексу к элементам свойства Controls формы и выясняет значение свойства Checked для каждого из четырех элементов управления и на основе этих данных создает переменную FontStyle. Теперь очень просто создать новый объект Font и вывести текст.

Будучи наследником ButtonBase, CheckBox обладает свойствами класса Button. Для флажков свойство TextAlign определяет расположение текста внутри прямоугольника, определенного свойством Size. Значение по умолчанию — ContentAlignment.MiddleLeft, т.е. текст центрирован по вертикали и выровнен по левому краю по горизонтали (но, конечно же, не заступает на сам прямоугольник с отметкой). Кроме того, класс CheckBox содержит свойство CheckAlign:


Свойства CheckBox (выборочно)



Тип Свойство Доступ

ContentAlignment CheckAlign Чтение/запись


Это свойство определяет местоположение прямоугольника с отметкой внутри прямоугольника. Значение по умолчанию — опять же ContentAlignment.MiddleLeft.

Чтобы поместить прямоугольник с отметкой справа от текста, стоит присвоить свойствам TextAlign и CheckAlign значение ContentAlignment.MiddleRight, и текст будет выровнен по правому краю. Интересно выглядит элемент управления, у которого высота примерно вдвое больше высоты шрифта, свойство CheckAlign установлено в ContentAlignment.TopCenter, a TextAlign — в ContentAlignment.BottomCenter. В таком элементе прямоугольник с отметкой горизонтально центрирован над горизонтально центрированным текстом.

Еще одно свойство класса CheckBox влияет на внешний вид элемента управления:


Свойства CheckBox (выборочно)



Тип Свойство Доступ

Appearance Appearance Чтение/запись


Перечисление Appearance определено так:


Перечисление Appearance



Член Значение

Normal 0
Button 1


Если установить это свойство равным Button, элемент управления CheckBox будет выглядеть как кнопка, сохраняющая свое состояние. Вам придется увеличить высоту элемента управления, чтобы включить границу кнопки.


netlib.narod.ru< Назад | Оглавление | Далее >

Сайт управляется системой uCoz