- •Лабораторные работы по курсу «Инструментальные средства визуального программирования»
- •1. Программирование односвязного списка
- •1.1.Задание
- •1.2.Описание вариантов заданий
- •2.Перегрузка векторных и матричных операций
- •2.1.Задание
- •2.2.Бесценные методические указания
- •2.3.Некоторые особенности перегрузки операций
- •3.Классная работа
- •3.1.Постановка задачи
- •2.4.Варианты заданий
- •3.2.Задания
- •3.3.Методические наказания к первой части работы
- •3.4.Методические наказания ко второй части работы
- •4.Алгоритмы
- •Задание
- •Варианты классов и их обработки
- •5.Приложение WinForms (cli)
- •5.1.Задание
- •5.2.Бесценные методические предписания
- •Int nRec;//Число записей файла, оно же будет числом элементов массивов
- •6.Графика в WinForms (cli)
- •6.1.Задание
- •6.2.Бесценные методические предписания
- •6.3.Индивидуальные задания
- •7.1.Задание
- •7.2.Бесценные методические наставления
- •8.Квикли файдингуем рутсы
- •8.1.Дармовые методические рекомендации
- •8.2.Задание
- •Варианты индивидуальных заданий
- •9.Приложение, основанное на модальном диалоговом окне
- •9.1.Нудные методические указания Модальные и немодальные диалоговые окна
- •Ресурсы и элементы управления
- •Сценарий создания приложения
- •Разбор приложения
- •Усовершенствование приложения
- •10.Разработка графического редактора
- •Задание.
- •10.1.Проектирование программы
- •10.2.Разработка интерфейса
- •Установка флагов
- •Создание меню и панели инструментов
- •Обработка сообщений о нажатии кнопки мыши
- •10.3.Рисование
- •10.4.Растягивание фигур
- •10.5.Обновление изображения
- •10.6.Сохранение метафайла на диске и его загрузка
- •Список ссылок
- •Работы, выполненные в осеннем семестре 2016/2017 по курсу ооп
7.2.Бесценные методические наставления
Замечательный управляющий элемент DataGridView позволяет отображать данные в табличном формате. Замечательно то, что в ячейке таблицы могут присутствовать не только текстовые или числовые данные, но также и: кнопки, переключатели, списки, изображения и некоторые другие сущности. Очень часто DataGridView используют для обработки данных, хранящихся в СУБД. Некоторые из этих возможностей, как и приемы работы с DataGridView (на C#), содержатся в источнике [5].
Шаг 1. Создаем каркас приложения. Как и прежде, создайте новый проект, выбрав платформу CLR и каркас WinForms. Затолкайте на форму компонент DataGridView.
Шаг 2. Создаем столбцы таблицы. Изначально таблица не имеет столбцов; их можно создавать на этапе дизайна или уже на этапе выполнения приложения. Второй способ целесообразно использовать тогда, когда число столбцов и их свойства на этапе дизайна приложения неизвестны.
В нашем
случае столбцы известны заранее и для
их создания необходимо вызвать страницу
свойств таблицы, найти свойство Columns
и вызвать редактор столбцов с помощью
кнопки
.
По минимуму для каждого столбца необходимо присвоить значение свойству HeaderText (наименование столбца, лучше кириллицей) и выбрать тип данных столбца ColumnType, в нашем случае это будет DataGridViewTextBoxColumn. Еще можно задать смысловое имя столбца (Name), лучше английскими буковками. Элементарно просто можно задать всплывающую подсказку ToolTipText для столбца, что должно несказанно удивить юзера вашей программулины, который наверняка не ожидал от вас такого сервиса.
Когда вы запустите приложение на выполнение, то должны лицезреть таблицу во всей, как говорится, красе.
Шаг 3. Разработка класса. Разработайте класс, объекты которого должны содержать данные, оговоренные в вашем варианте задания. В обязательном порядке реализуйте в классе несколько свойств, в целях, скажем, тренажа и лучшего усвоения материала (см. подраздел «Свойства» в работе [2]). Добавьте в класс необходимые методы.
Класс лучше разместить в отдельном файле. Для этого проще всего с помощью команды ProjectAdd Class добавить в проект обычный С++ класс, в результате чего, как обычно, будет создан заголовочный файл и файл реализации, например, MyCls.h и MyCls.cpp. Сразу исключите из проекта файл MyCls.cpp, вызвав для него контекстное меню и выполнив в нем команду Exclude from project. Заголовочный файл MyCls.h приведите примерно к такому виду:
#pragma once
using namespace System;
namespace GV
{
ref class CMyCls
{
String ^str;
public:
property int Number; /*Простейшее определение свойства, значение
которого хранится в некоторой скрытой ячейке памяти*/
/*Значение свойства Name хранится в поле str*/
property String^ Name
{
String^ get()
{
return str;
}
void set(String ^ value)
{
str=value;
}
}
};
}
Разумеется, что имя пространства имен вы замените на свое, такое же как в файле Form1.h. Наверное, и имя класса вы выберите другое.
В начало файла Form1.h добавьте директиву #include "MyCls.h", разумеется, после директивы #pragma once. Теперь в классе формы вы сможете использовать имя вашего класса.
Так как вам понадобится где-то хранить и обрабатывать много объектов этого класса, то надо использовать массив. Опишите его в файле Form1.h:
#pragma endregion
private:
array <CMyCls^> ^Arr;
Теперь в методах класса Form1 вы сможете использовать массив Arr. Само собой, что вместо динамического массива Arr вы можете использовать (статический) класс System::Array или еще какое-нибудь хранилище-вместилище.
Шаг 4. Заполняем строки таблицы. Для того чтобы вывести данные в таблицу, необходимо, очевидно, проделать следующее:
добавить в приложение меню, одной из команд которого должна быть команда открытия файла с исходными данными;
подсчитайте число записей файла для того чтобы задать конкретное число элементов массива, если вы используете динамический массив array (не путать с Array!);
читайте запись файла, контролируйте корректность данных, помещайте прочитанные данные в объект, а объект – в массив;
присвойте значения элементов массива строкам таблицы DataGridView.
В ячейки таблицы DataGridView данные можно записывать многими способами (см. [5]). Приведем пример:
CMyCls ^obj=gcnew CMyCls;
obj->Number=1024;
obj->Name="Кот Матроскин";
int ArrSize=23;
Arr=gcnew array <CMyCls^>(ArrSize);
Arr[0]=obj;
/*Можно создать массив строк и сразу заполнить всю строку таблицы*/
array<String^>^row1 = gcnew array<String^>{
(Arr[0]->Number).ToString(),Arr[0]->Name};
this->dataGridView1->Rows->Add(row1);
/*А можно заполнять ячейки таблицы по одной*/
dataGridView1->Rows[1]->Cells[0]->Value=(Arr[0]->Number).ToString();
dataGridView1->Rows[1]->Cells[1]->Value=Arr[0]->Name;
/*А это что?*/
this->Text=safe_cast<String ^>(dataGridView1->Rows[0]->Cells[0]->Value);
Шаг 5.. Вы легко можете создавать новые формы приложения, помимо главной (подразумевается Form1), создавать и показывать их в любое подходящее для вас время или прятать, обмениваться с ними данными, дружить, обниматься и т.п. Для этого возьмите керамический кувшин, потрите его тщательно и с помощью тайной команды ProjectAdd New Item вызовите волшебного Аладдина и прикажите ему создать компонент Windows Form. Украсьте новехонькую формочку разными стекляшками, зеркальцами, перьями и др. подобными не менее ценными атрибутами. Допустим, вы нарекли эту формочку совершенно оригинальным, современным именем Form2. Тогда в файл Form1.h добавьте, не поленитесь, директиву #include “Form2.h”. Теперь точь-в-точь в тот момент времени, когда вам захочется увидеть вторую формочку, пропишите следующие заклинания:
Form2 ^f2 = gcnew Form2();/*Просто создали форму*/
f2 ->ShowDialog(); /*Показываем форму как диалоговое (модальное) окно.
Это значит, что пока пользователь не закроет формочку, он не сможет
вернуться той форме, из которой он активировал Form2*/
f2 ->Show();/*Показываем форму как немодальное окно. Это значит,
что пользователь может свободно "перемещаться" между окнами*/
f2 ->Hide();/*Тиха украинская ночь, но форму лучше перепрятать*/
Никакая сила не может вам помешать обмениваться (публичными) данными с новой формой. А не слабо ли добраться из новехонькой формы Form2 до данных и функций формы Form1?
