Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Визуальные компоненты ListBox, ComboBox, RadioButton и GroupBox.




        Список ListBox.Компонент ListBox предназначен для хранения перечня текстовых элементов, например, списка фамилий. Он дает возможность пользователю выбирать элементы из списка, проводить его сортировку и т.д.

        Основное свойство компонента ListBox – Items. Оно представляет коллекцию строк и имеет следующие основные методы:

- Add(s) – добавление элемента s в конец списка;

- Clear() – удаление элементов из списка (очистка списка);

- Insert(n,s) – вставка элемента s в список под номером n, n – целое число (первый элемент списка имеет номер 0);

- Remove(s) – удаление элемента s из списка;

- Count – количество элементов в списке (на единицу больше индекса последней строки списка);

- Items[n] – возвращает строку списка с номером n, n – целое число.

        Формирование списка строк можно выполнить двумя способами. Первый способ предусматривает создание первоначального списка на этапе проектирования приложения. Для этого нужно выделить компонент ListBox на форме, в окне Properties выбрать свойство Items и щелкнуть на кнопке с тремя точками. Откроется диалоговое окно String Collection Editor (редактор списка строк), в котором каждую фамилию следует размещать в отдельной строке, заканчивая набор строки нажатием клавиши <Enter>.

       Второй способ позволяет организовать список непосредственно в процессе выполнения приложения. Для этого необходимо использовать окно редактирования TextBox и кнопку управления. Каждая фамилия вводится в окно редактирования и нажатием кнопки перемещается в окно ListBox. Соответствующий фрагмент программы, реализующий указанную процедуру, расположен ниже.

 ListBox1->Items->Add(textBox1->Text);

 textBox1->Text = “”;

 textBox1->Focus();

Рассмотрим еще несколько полезных свойств, которые используются при работе со списками. Свойство SelectedIndex дает возможность выбирать нужные строки из списка. Для этого необходимо выделить строку в списке щелчком клавиши мыши. При этом значение свойства SelectedIndex станет равным номеру выбранной строки (напомним, что первая строка имеет номер 0). В случае отсутствия выбора SelectedIndex = -1. Ниже приведен фрагмент программы, иллюстрирующий операцию выбора и вывода на экран строки списка.

If (ListBox1->ItemIndex < 0)

MessageBox::Show (“Выбор не сделан”);

Else

MessageBox::Show (“Ваш выбор” + “:” +

Convert::ToString(

listBox1->Items[listBox1->SelectedIndex]));

Свойство Sorted позволяет выполнить сортировку списка строк по алфавиту. Для этого необходимо задать значение этого свойства равным true.

       Выпадающий список ComboBox.Этот компонент является комбинацией редактируемого поля TextBox и списка ListBox: в форме он представляется в виде редактируемого поля с треугольной кнопкой справа. По умолчанию компонент ComboBox появляется в виде однострокового окна типа TextBox (см. Рис.8, слева). Нажатие на эту кнопку осуществляет вывод данных в виде выпадающего списка типа списка ListBox (Рис.8 , справа). Из этого списка можно выбирать элементы, которые затем можно редактировать в редактируемом поле (аналог поля TextBox).

                                               

Рис.8 Вид списка ComboBox

       Основные свойства компонента ComboBox – коллекция строк Items, имеющая те же методы, что и в компоненте ListBox, а также свойство Text, содержащее значение поля редактируемого элемента, извлеченного из списка.

       Компонент RadioButton (радиокнопка).Этот компонент используется как флажок-переключатель для предоставления возможности выбора одного из нескольких вариантов работы. На рис.9 представлен примерный вид 2-х компонентов:

                                            

Рис.9 Вид компонента GroupBox с радиокнопками

       Оба представленных на Рис. 9 компонента выключены. Для включения одного из них необходимо щелкнуть левой клавишей мыши на кружочке, в котором сразу же появится точка. Следует отметить, что в группе компонентов RadioButton может быть включен только один из них, а остальные будут автоматически выключены.

       Основное свойство компонента – Checked, принимающее дав значения: true – компонент включен, false – выключен.

       Компонент GroupBox.Компонент представляет контейнер, который используется для разделения переключателей типа RadioButton на различные группы. В результате включение компонента RadioButton одной группы не повлияет на состояние такой же кнопки в другой группе. Таким образом, если необходимо, чтобы кнопки RadioButton обрабатывали несколько непересекающихся ситуаций, то такие кнопки нужно разместить в разных контейнерах GroupBox.  

       Рассмотрим пример создания приложения, иллюстрирующий работу визуальных компонент, описанных выше в разделе 3.2. На Рис.10 представлена основная форма этого приложения. С помощью кнопки «Ввод» в расположенном ниже ее окне вводится список из нескольких фамилий, который затем упорядочивается либо по алфавиту, либо в обратном порядке (кнопка «Сортировка») . Полученные списки отображаются в окне ListBox (слева) и в окне ComboBox (справа ). Нажатие кнопки «Выбор» позволяет перенести отмеченную мышью строку в списке ListBox в окно редактирования.

Рис.10. Пример выполнения программы «Сортировка»

Компонент GroupBox с заголовком «Вид сортировки», включает две радиокнопки, задающими способ сортировки. На Рис.10 выбран способ «По алфавиту», о чем свидетельствует наличие точки в соответствующей радиокнопке).

Ниже представлен текст функций-обработчиков событий.

 Обработчик кнопки «Ввод»:

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)

                                           {

                                                           listBox1->Items->Add(textBox1->Text);

                                                           comboBox1->Items->Add(textBox1->Text);

                                                           textBox1->Text="";

                                                           textBox1->Focus();

                                           }

 

 Обработчик кнопки «Сортировка»:

 

private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e)

                                           {            

                                                           

                                          int i,n,n1;

                                          String ^s,^s1;

                                          if(radioButton1->Checked)

                                                          {

                                                           listBox1->Sorted=true;

                                                                          comboBox1->Sorted=true;

                                                           }

                                                           if(radioButton2->Checked)

                                                           {

                                                           listBox1->Sorted=true;

                                                           listBox1->Sorted=false;

                                                           comboBox1->Sorted=true;

                                                           comboBox1->Sorted=false;

                                                           n=listBox1->Items->Count;

                                                           for(i=0;i<n;i++)

                                                           {

                                                                          s=listBox1->Items[0]->ToString();

                                                                          listBox1->Items->Remove(listBox1->Items[0]);

                                                                          listBox1->Items->Insert(n-1-i,s);

                                                                          s1=comboBox1->Items[0]->ToString();

                                                                          comboBox1->Items->Remove(comboBox1->Items[0]);

                                                                          comboBox1->Items->Insert(n-i-1,s1);

                                                           }            

                                           }

 

       }

 

 Обработчик кнопки «Выбор»:

 

private: System::Void button3_Click(System::Object^ sender, System::EventArgs^ e)

                           {

                                           if(listBox1->SelectedIndex<0)

                                                           MessageBox::Show("Выбор не сделан");

                                           else

                                           { MessageBox::Show("Ваш выбор"+":"+

                                                           Convert::ToString(

                                                           listBox1->Items[listBox1->SelectedIndex]));

                                                           textBox1->Text=Convert::ToString(

                                                          listBox1->Items[listBox1->SelectedIndex]);

                                           }

                           }

 

 Обработчик кнопки «Выход»:

 

private: System::Void button4_Click(System::Object^ sender, System::EventArgs^ e)

                           {

                                           Close();

                           }

 

Матрица ячеек DataGridView

       Компонент DataGridView представляет собой таблицу, содержащую строки. Этот компонент используется для отображения таблиц и матриц. В зависимости от значений свойств компонент DataGridView может использоваться как для ввода, так и для вывода информации. Таблица имеет две полосы прокрутки, что позволяет выводить большие массивы данных. Заголовки столбцов таблицы фиксируются и их положение не меняется при вертикальной прокрутке.

       Компонент DataGridView находится в палитре Toolbox в разделе Data. После размещения его на форме необходимо сначала задать структуру будущей таблицы. Для этого необходимо щелкнуть мышью стрелку в верхней части компонента для входа в меню проектирования компонента (Рис.11)

Рис.11 Визуальная компонента DataGridView

        Следует выбрать пункт Add Column и в открывшимся диалоговом окне задать в окошке Header Text заголовки столбцов таблицы. Идентификаторы столбцов (name) как правило оставляют без изменений. В примере введены следующие заголовки: Фамилия, Экзамен1, Экзамен2, Экзамен 3. Пункт меню Edit Columns позволяет перейти к редактору столбцов, показанному на Рис.12.

          

Рис.12 Редактирование столбцов компоненты DataGridView

        Чаще всего изменяют ширину столбца Width. Для редактирования нужного столбца необходимо выбрать его номер в окне Selected Columns, перейти в окно Column Properties, выбрать соответствующую опцию и внести изменения.

        Пункты менюEnable Adding, Enable Editing и Enable Deleting разрешают (наличие «галочки») или запрещают производить добавление, редактирование и удаление столбцов таблицы.

        Целесообразно также изменить имя компонента в окне свойств, например, вместо dataGridView1 использовать более короткое имя dGV1. Это облегчит написание кодов обработчиков событий.

        Количество строк таблицы задается на этапе выполнения приложения либо в конструкторе формы, либо в одном из обработчиков событий с помощью следующей команды:

        dGV1->RowCount=5;

  Также в программе можно добавлять или удалять новые столбцы и строки. Для добавления используется команда

                   dGV1->Columns->Add(st1,st2);

где st1, st2 – строки типа String ^, задающие идетификатор и заголовок столбца, соответственно. Удаление столбца производится инструкцией

                   dGV1->Columns->Remove(st1);

Добавление строки можно осуществить командой

                   dGV1->Rows->Add();

а удаление с помощью инструкции

                   dGV1->Rows->RemoveAt(n);

где n – идекс удаляемой строки.

        Информацию в ячейки таблицы можно заносить двумя способами. Первый наиболее простой способ – непосредственное заполнение таблицы вручную после запуска при- ложения на выполнение. Второй – заполнение таблицы программным путем. В этом случае для занесения информации в ячейку таблицы с индексами i,j используется следующая инструкция:

                   dGV1->Rows[i]->Cells[j]->Value=inf;

где inf – вводимое числовое или строковое значение. Следует отметить, что значения индексов i,j начинаются с нуля. Аналогичной инструкцией производится считывание информации из таблицы с учетом ее типа. Ниже приведены примера чтения из таблицы, соответственно, вещественных и строковых данных:

 double B = Convert::ToDouble(dGV1->Rows[i]->Cells[j]->Value);

 String ^ st = Convert::ToString(dGV1->Rows[i]->Cells[j]->Value).

        Рассмотрим пример работы с матрицей ячеек, в котором реализуется обработка сводной экзаменационной ведомости. Таблица содержит пять столбцов со следующими заголовками: «Фамилия», «Экзамен1», «Экзамен2», «Экзамен3», «Экзамен4». В новую таблицу необходимо перенести данные о студентах , средний балл которых не менее 4.

        1. В форме, которой дано название «Успеваемость», формируем две таблицы: исходную и результатов отбора. (Рис.13). Кнопка «Ввод» предназначена для задания количества студентов в ведомости. Кнопка «Выбор» инициирует отбор студентов из исходной таблицы по заданному критерию и перенос сведений о них в таблицу результатов отбора. Кнопка «Выход» обеспечивает прекращение работы.

Рис.13 Форма приложения «Успеваемость»

  1. Напишем обработчики для обеих кнопок. Текст этих обработчиков представлен ниже.

Обработчик кнопки «Ввод»:

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)

                                   {

                                                   n = Convert::ToInt32(textBox1->Text);

                                                   dataGridView1->RowCount= n;

                                                   dataGridView2->RowCount= n;

                                   }

Целая переменная n должна быть описана как член класса Form1.

Обработчик кнопки «Выбор»:

private: System::Void button3_Click(System::Object^ sender, System::EventArgs^ e)

    {

     float sr;

     int k=0;

     int j;

     float *a = (float*)calloc(n,sizeof(float));

     for(int i=0;i<n;i++)

                   {  

                   sr=0;

                                   for( j=1;j<5;j++)

                                   {

                                   a[j-1]=Convert::ToDouble(dataGridView1->Rows[i]->Cells[j]->Value);

                      sr=sr+a[j-1];

                                   }

                                   sr=sr/4;

                                   if(sr>=4)

                                   {

                                   for( j=0;j<5;j++)

                                                   dataGridView2->Rows[k]->Cells[j]->Value=dataGridView1->Rows[i]->Cells[j]->Value;

                                                  dataGridView2->Rows[k]->Cells[5]->Value=sr;

                                                  k=k+1;

                                                   }

                                   }

                   }

Обработчик кнопки «Выход»:

private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e)

                   {

                                   Close();

                   }

 

  На рис.14 представлен пример выполнения программы для заданного списка студентов.

Рис.14 Результат работы приложения «Успеваемость»










Последнее изменение этой страницы: 2018-06-01; просмотров: 575.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...