- •Предисловие
- •1 Среда визуального программирования visual studio.Net
- •1.1 Введение в объектно - ориентированное программирование
- •1.2 Понятие о событийном управлении Windows
- •1.3 Основные окна среды Visual Studio.Net
- •1.4 Основные структурные элементы разработки проекта c#
- •1.5 Пример первой учебной программы
- •2.1 Технология визуального проектирования форм
- •1.6 Вопросы для самопроверки
- •2 Элементы управления
- •2.2 Элементы управления панели Toolbox
- •2.3 Пример использования элементов управления
- •2.4 Вопросы для самопроверки
- •3 Графический интерфейс языка c#
- •3.1 Пространство имен System.Drawing
- •3.2 Класс Graphics
- •3.3 Пример программной реализации
- •3.4 Вопросы для самопроверки
- •4 Использование меню в приложении
- •4.1 Меню программы
- •4.2 Создание инструментальной панели приложения
- •4.3.Вопросы для самопроверки
- •5 Использование диалоговых меню
- •5.1 Обработчики событий для работы с матрицей
- •5.2 Обработчик событий для открытия файла
- •5.3 Обработчик событий для записи в файл
- •5.4 Обработчик событий для работы с текстом
- •5.5 Вопросы для самопроверки
- •6 Многооконные приложения
- •6.1 Создание «кнопочной» главной формы
- •6.2 Добавление новых форм приложения
- •6.3 Обработчики событий главной формы
- •6.4 Табличная форма представления и редактирования значений
- •6.5 Графическая форма представления прямоугольников
- •6.6 Вопросы для самопроверки
- •7. Понятие класса
- •7.1 Понятие класса
- •7.2 Состав класса
- •7.3 Методы класса
- •7.4 Структура объекта
- •7.5 Пример учебной программы
- •7.6 Доступ к полям
- •7.7 Вопросы для самопроверки
- •1 Понятие класса?
- •8 Элементы классов
- •8.1 Конструкторы
- •8.2 Деструкторы
- •8.3 Свойства
- •8.4 Параметр по ссылке this
- •8.5 События класса
- •8.6 Перегрузка операций класса
- •8.7 Вопросы для самопроверки
- •9 Принципы ооп
- •9.1 Понятие инкапсуляции
- •9.2 Понятие наследования
- •9.3 Вопросы для самопроверки
- •10 Принцип полиморфизма
- •10.1 Понятие полиморфизма
- •10.2 Пример статического наследования методов
- •10.3 Пример динамического наследования методов
- •10.4 Вопросы для самопроверки
- •11 Использование интерфейсов
- •11.1 Понятие интерфейса
- •11.2 Синтаксис интерфейса
- •11.3 Использование стандартного интерфейса iEnumerable
- •11.4 Вопросы для самопроверки
- •12 Композиция и коллекция классов
- •12.1 Понятие композиции и коллекции класса
- •12.2 Пример использования композиции и коллекции класса
- •12.3 Некоторые коллекции Framework
- •12.4 Коллекция ArrayList
- •12.5 Вопросы для самопроверки
- •13 Делегаты
- •13.1 Понятие делегата
- •13.2 Описание делегата
- •13.3 Пример использования делегата
- •13.4 Совместимость делегатов
- •13.5 Методы базовых классов делегатов
- •13.6 Вопросы для самопроверки
- •14 События
- •14.1 Понятие события
- •14.2 Некоторые часто используемые события среды Visual Studio.Net
- •14.3 Пример использования стандартных событий классов
- •14.4 Нестандартные события классов
- •14.5 Вопросы для самопроверки
- •Приложение а Ответы на вопросы для самопроверки
- •1 Понятие класса?
- •Предметный указатель
- •Список литературы
6.4 Табличная форма представления и редактирования значений
Рассмотрим обработчики событий окна табличной формы представления и редактирования значений координат вершин прямоугольников.
Обработчики реализованы на форме 2, изображенной на рисунке 6.6. Для табличной формы представления значений массива использован элемент DataGridView. Рассмотрим его применение в интерфейсе, позволяющем пользователю вводить и отображать двумерные массивы.
Рисунок 6.6 – Табличная форма представления значений массива
В свойствах элемента DataGridView выбираем Columns и запускаем редактор параметров столбцов таблицы, в котором мы добавляем необходимое количество столбцов и определяем название столбцов в окне формы и имя столбцов в программе (см. рисунок 6.7). С помощью редактора столбцов определяется их ширина в окне формы.
Рисунок 6.7 – Работа с редактором столбцов DataGridView
Исходный код формы 2 имеет следующий вид:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form2 : Form
{
public static int i, j;
public static string kop;
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
for (i = 0; i < 6; i++)
{
dataGridView1.Rows.Add();
for (j = 0; j < 6; j++)
{
dataGridView1.Rows[i].Cells[j].Value=Form1.a[i,j].ToString();
}
if (Form1.a[i,4]==0) dataGridView1.Rows[i].Cells[4].Value = "Прямоугольник";
else dataGridView1.Rows[i].Cells[4].Value = "Квадрат";
}
}
private void button2_Click(object sender, EventArgs e)
{
Close();
}
private void button3_Click(object sender, EventArgs e)
{
string elem = "";
bool ok;
int k;
for (i = 0; i < 6; i++)
for (j = 0; j < 4; j++)
{
do
{
ok = true;
try
{
elem = dataGridView1.Rows[i].Cells[j].Value.ToString();
Form1.a[i, j] = int.Parse(elem);
}
catch (Exception any)
{
Form5 f5 = new Form5();
if (f5.ShowDialog() == DialogResult.OK) k = 0;
dataGridView1.Rows[i].Cells[j].Value = kop;
ok = false;
}
} while (!ok);
}
for (i = 0; i < 6; i++)
{
if (Math.Abs(Form1.a[i,0]-Form1.a[i,2]) == Math.Abs(Form1.a[i, 1] - Form1.a[i, 3])) Form1.a[i, 4] = 1;
else Form1.a[i, 4] = 0;
Form1.a[i, 5] = Math.Abs(Form1.a[i, 0] - Form1.a[i, 2]) * Math.Abs(Form1.a[i, 1] - Form1.a[i, 3]);
}
}
}
}
На форме 2 реализованы 3 обработчика событий – вывод матрицы в таблицу элемента DataGridView, редактирование значений матрицы и возврат к 1 форме. Рассмотрим каждый фрагмент кода отдельно.
Вывод матрицы в таблицу элемента DataGridView содержит цикл перебора строк таблицы, в котором программно добавляется очередная строка и запускается цикл перебора столбцов таблицы.
Поскольку массив сформирован в виде глобальной переменной формы 1, то его использование в форме 2 требует следующей записи Form1.a[i,j].
Значение столбца 4 двумерного массива анализируется на наличие 0 – признак равенства сторон прямоугольника (квадрат).
В последний столбец выводится значение площади прямоугольника.
Процесс редактирования элементов DataGridView включает непосредственное изменение значений на форме 2 и запуск обработчика «Редактирование объекта», в котором содержимое элементов DataGridView переписывается в массив формы 1. Процесс перезаписи находится в охраняемом блоке. Если вы вместо цифр случайно введете символ буквы или другой знак, то запускается обработчик ошибочной ситуации, который создаст и откроет диалоговое окно 5 для повторного ввода ошибочного значения (см. рисунок 6.8).
Исходный код формы 5:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form5 : Form
{
public Form5()
{
InitializeComponent();
label1.Text = "a[" + Form2.i.ToString() + "," + Form2.j.ToString() + "]= ?";
}
private void button1_Click(object sender, EventArgs e)
{
Form2.kop = textBox1.Text;
Close();
}
}
}
Исправление ошибок ввода продолжается пока не будет введено правильное числовое значение.
Если в результате редактирования элементов DataGridView изменяется тип прямоугольника, например, получается квадрат, то это учитывается в столбце 4 массива. Одновременно перезаписывается новое значение площади нового прямоугольника.
Рисунок 6.8 – Исправление ошибки ввода
В приведенном коде формы 2 программно добавляется очередная строка элемента DataGridView. Можно программно формировать и столбцы элемента DataGridView (обычно это делается при однотипных столбцах). Например, если нам необходимо подготовить элемент DataGridView на 6 столбцов, то можно использовать следующий фрагмент кода для программного добавления столбцов:
dataGridView1.Columns.Clear();
DataGridViewColumn column;
for (int i = 0; i < 6; i++)
{
column = new DataGridViewTextBoxColumn();
column.DataPropertyName = "Column" + i.ToString();
column.Name = "Column" + i.ToString();
dataGridView1.Columns.Add(column);
}
В первой строке кода мы удаляем предыдущее «состояние столбцов» элемента DataGridView, объявляем переменную column, затем в цикле создаем объект column, которому присваиваем имя для формы и имя для программы, потом добавляем созданный объект нашему элементу.
