Компоненты Windows Forms. Компонент CheckedListBox

   
На этом шаге мы рассмотрим назначение и использование этого компонента.

   
Компонент находится в списке All Windows Forms (Все формы Windows Forms) палитры компонентов. Компонент CheckedListBox является расширением ListBox.
Он делает почти все, что делает ListBox, но дополнительно выводит окна контроля (флажки-переключатели), в которых можно делать отметку галочкой. Вид компонента показан на рисунке 1.


Рис.1. Вид компонента CheckedListBox, помещенного в форму

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

   
А выключается флажок при щелчке на строке или на нем самом.

   
Если же CheckOnClick установлено в True, то флажок включается одновременно с выбором элемента (и выключается при повторном щелчке на нем).

   
Существует свойство ThreeDCheckBoxes, которое определяет стиль окна флажка (будет ли оно в стиле Flat или Normal). Если значение свойства равно True,
то стиль Flat, иначе - Normal.

   
Перечень свойств компонента, отображенных в его окне Properties (Свойства), показан на рисунке 2.


Рис.2. Свойства компонента CheckedListBox

   
Компонент CheckedListBox поддерживает три состояния флажка:

  • Checked - флажок включен;
  • Unchecked - флажок выключен;
  • Indeterminate - состояние неопределенности (флажок закрашен серым цветом).

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

   
Существуют методы CheckedListBox, с помощью которых можно определять и устанавливать состояние флажка:

  • GetItemCheckState (int index);
  • SetItemCheckState (int index, CheckState value).

Здесь:

  • index - это индекс того элемента, состояние флажка которого определяется;
  • CheckState value - значение состояния флажка. Состояние определено классом CheckState и имеет три значения (Checked, Unchecked,
    Indeterminate - им соответствуют числовые значения 1, 0 и 2).

   
Приведем пример задания состояния флажков и определения их состояния. Текст обработчика события DoubleClick компонента CheckedListBox приведен ниже, а результат -
на рисунке 3.

private: System::Void checkedListBox1_DoubleClick(System::Object^  sender, 
     System::EventArgs^  e) {
	 checkedListBox1->SetItemCheckState(0, CheckState::Checked);
	 checkedListBox1->SetItemCheckState(1, CheckState::Unchecked);
	 checkedListBox1->SetItemCheckState(2, CheckState::Indeterminate); 
	 int i = (int)checkedListBox1->GetItemCheckState(0);
 }


Рис.3. Программная установка флажков

   
Пояснение:
Здесь задаются состояния для флажков 1, 2 и 3-й строк. Последний оператор определяет состояние 1-й строки. Так как тип результата, выдаваемого методом GetItemCheckState(), - это
тип CheckState, то чтобы увидеть состояние, надо этот тип привести к типу int принудительно. Поэтому после знака присваивания стоит (int).

   
Чтобы узнать, помечен ли элемент списка, можно выполнить оператор:

  bool b = this->checkedListBox1->GetItemChecked(i);

   
Результат метода GetItemChecked() - логическая переменная, i - индекс элемента.

   
Можно и другим способом установить флажок. Для этого следует выполнить оператор:

  this->checkedListBox1->SetItemChecked(3, 1);

   
Здесь:

  • 3 - индекс элемента (4-я строка);
  • 1 - логическое значение true (второй параметр этого метода имеет логический тип).

   
Обратим внимание на событие ItemCheck, которое возникает, когда состояние флажка меняется. Оно пригодится при обработке выборки из CneckedListBox.

   
В CheckedListBox можно также загружать текстовые строки из файла, как для ListBox. Пример такой загрузки показан на рисунке 4.
Фрагменты текста программы - в примере ниже.

.   .   .   .   
#include <stdio.h>
namespace My167_1 {
.   .   .   .   
private:
	/// <summary>
	// функция: загружает из файла текстовые строки в CheckedListBox 
	void LoadFromFile(char *File, CheckedListBox ^lb)
	{
		char s[300];
		FILE *fp;
		lb->Items->Clear();
		if (!(fp=fopen(File, "r")))
		{
			MessageBox::Show("Ошибка открытия файла", 
                           "Работа с CheckedListBox", 
			   MessageBoxButtons::OK, 
			   MessageBoxIcon::Asterisk); 
		        return;
		}
		fgets(s, 300, fp); 
		while(!feof(fp)) {
			String ^dd = gcnew String(s); 
			// этот способ конвертирования не удаляет последний 
			// управляющий символ, который надо удалить:
			int j = dd->Length-1; 
			dd = dd->Substring(0, j); 
			lb->Items->Add(dd);
			fgets(s,300,fp); 
		}
	}
		/// Требуется переменная конструктора.
.   .   .   .   
// Выход
private: System::Void button2_Click(System::Object^  sender, System::EventArgs^  e) {
		 Close();
 }
// Загрузка из файла
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
		 LoadFromFile("d:\\file.txt", this->checkedListBox1);
 }

Архив проекта можно взять здесь.


Рис.4. Пример загрузки текстового файла в CheckedListBox

   
На следующем шаге мы рассмотрим пример использования этого компонента.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий