Язык C# — Методичка

Министерство образования РФ
Государственное образовательное учреждение
высшего профессионального образования
«Братский государственный университет»



Ю.А.Шичкина






Создание приложений на языке Visual C# в среде программирования Visual Studio



Учебное пособие




Братск 2011
УДК 681.3+681.5


Создание приложений на языке Visual C# в среде программирования Visual Studio: Учебное пособие./ Ю.А.Шичкина. – Братск: ГОУ ВПО «БрГУ», 2011. – 157с.


В пособии рассматривается широкий круг вопросов, связанных с разработкой приложений на языке Visual C# в среде программирования Visual Studio. Пособие предназначено для студентов направлений подготовки «Математика и Информатика», «Прикладная математика», «Информационные системы», «Профессиональное обучение», «Прикладная информатика в экономике», «Информационная безопасность».


Рецензенты:

д.физ.-мат.н, профессор, заведующий кафедрой Прикладной математики и информатики Санкт-Петербургского государственного архитектурно-строительного университета Б.Г.Вагер
д.т.н., профессор, заведующий лабораторией информатики и вычислительной техники Санкт-Петербургского института информатики российской академии наук В.И.Воробьев



Печатается по решению издательско-библиотечного совета
Содержание
13LINK \l "Введение"14Введение15


13 LINK \l "Основы_программирования" 14Основы программирования на языке С#15


13 LINK \l "Структура_программы" 14Структура программы15


13 LINK \l "Типы_данных" 14Типы данных в C#15


13 LINK \l "Переменные" 14Переменные15 и 13 LINK \l "Константы" 14константы15


13 LINK \l "Управляющие_конструкции" 14Управляющие конструкции15


13 LINK \l "Комментарии" 14Комментарии15


13 LINK \l "Массивы" 14Массивы15


13 LINK \l "Исключения" 14Исключения15


13 LINK \l "Среда_Visual_Studio" 14Среда Visual Studio15


13 LINK \l "Framework" 14Общие сведения об основных понятиях платформы .NET Framework15


13 LINK \l "Контейнеры" 14Контейнеры: проекты и решения15


13 LINK \l "Типы_файлов" 14Типы и расширения файлов в Visual Studio для С#15


13 LINK \l "Переходы" 14Переходы в рамках интегрированной среды разработки15


13 LINK \l "Типы_окон" 14Типы окон и операции над ними15


13 LINK \l "Элементы_управления" 14Элементы управления15


13 LINK \l "Панель_элементов" 14Панель элементов15


13 LINK \l "Свойства" 14Окно "Свойства"15


13 LINK \l "Создание_приложений_Windows_Forms" 14Создание приложений Windows Forms15


13 LINK \l "Операции_проектами" 14Операции над проектами Windows15


13 LINK \l "Работа_с_формами" 14Работа с формами15


13 LINK \l "Создание_формы" 14Создание формы Windows Forms15


13 LINK \l "Исключение_формы_из_проекта" 14Исключение формы из проекта15


13 LINK \l "Удаление_формы_из_проекта" 14Удаление формы из проекта15


13 LINK \l "Добавление_формы_в_проект" 14Добавление формы в проект15


13 LINK \l "Создание_дочерней_формы" 14Создание дочерней формы15


13 LINK \l "Настройка_формы" 14Настройка формы15


Просмотр кода для формы


13 LINK \l "Создание_глобальной_переменной" 14Создание глобальной переменной класса Form15


13 LINK \l "Переименование_формы" 14Переименование формы15


13 LINK \l "Расположения_форм" 14Установка расположения форм Windows Forms на экране15


13 LINK \l "Выбор_начальной_формы" 14Выбор начальной формы в приложении Windows15


13 LINK \l "Настройка_размера_формы" 14Настройка размера формы Windows Forms15


13 LINK \l "Добавление_фоновых_изображений" 14Добавление фоновых изображений в формы Windows Forms15


13 LINK \l "Отображение_модальных_форм" 14Отображение модальных и немодальных форм Windows Forms15


13 LINK \l "Создание_прозрачных_форм" 14Создание прозрачных форм Windows Forms15


13 LINK \l "Изменение_границ_формы" 14Изменение границ формы Windows Forms с помощью конструктора15


13 LINK \l "Переход_между_формами" 14Переход между формами15


13 LINK \l "Cкрытие_закрытие_форм" 14Cкрытие и закрытие форм15


Работа с 13 LINK \l "Элементы_управления_Win" 14элементами управления Windows Forms15


13 LINK \l "Добавление_элементов" 14Добавление элементов управления в формы Windows Forms15


13 LINK \l "Изменение_размера_элементов" 14Изменение размера элементов управления в формах Windows Forms15


13 LINK \l "Определение_текста_элемента" 14Определение текста, отображаемого элементом управления Windows Forms15


13 LINK \l "Определение_клавиш_доступа" 14Определение клавиш доступа для элементов управления Windows Forms15


13 LINK \l "Добавление_невидимых_элементов" 14Добавление элементов управления, для которых не существует пользовательского интерфейса, в формы Windows Forms15


13 LINK \l "Закрепление_элементов" 14Закрепление элементов управления в формах Windows Forms15


13 LINK \l "Выравнивание_нескольких_элементов" 14Выравнивание нескольких элементов управления в формах Windows Forms15


13 LINK \l "Обработка_события_клавиши" 14Обработка события клавиши на элементе управления15


13 LINK \l "Обращение_к_элементу_на_др_форме" 14Обращение к элементу управления на другой форме15


13 LINK \l "Привязка_элементов" 14Привязка элементов управления в формах Windows Forms15


13 LINK \l "Элементы_управления_описание" 14Элементы управления15


13 LINK \l "Button" 14Button (кнопка)15


13 LINK \l "Label" 14Надпись – Label15


13 LINK \l "TextBox" 14Поле ввода TextBox15


13 LINK \l "Panel" 14Панель Panel15


13 LINK \l "Timer" 14Таймер Timer15


13 LINK \l "CheckBox" 14Переключатель CheckBox15


13 LINK \l "RadioButton" 14Переключатель RadioButton15


13 LINK \l "GroupBox" 14Группа объектов GroupBox15


13 LINK \l "ComboBox" 14Списки ComboBox15


13 LINK \l "PictureBox" 14Рисунки PictureBox15


13 LINK \l "ImageList" 14Массив рисунков ImageList15


13 LINK \l "Меню" 14Меню15


13 LINK \l "MenuStrip" 14Программное меню MenuStrip15


13 LINK \l "ContextMenu" 14Контекстное меню ContextMenu15Strip


13 LINK \l "ToolStrip" 14Панель инструментов ToolStrip15


13 LINK \l "StatusStrip" 14Строка состояния StatusStrip15


13 LINK \l "DataGrid" 14Таблицы DataGrid15View


13 LINK \l "Диалоговые_окна" 14Диалоговые окна15 OpenFileDialog и SaveFileDialog


13 LINK \l "ColorDialog" 14Работа с цветами ColorDialog15


13 LINK \l "FontDialog" 14Шрифты FontDialog15


13 LINK \l "DomainUpDown" 14Счетчик DomainUpDown15


13 LINK \l "NumericUpDown" 14Счетчик NumericUpDown15


13 LINK \l "ProgressBar" 14Индикатор процесса ProgressBar15


13 LINK \l "RichTextBox" 14Текстовый редактор RichTextBox15


13 LINK \l "TabControl" 14Вкладки TabControl15


13 LINK \l "MonthCalendar" 14Календарь MonthCalendar15


13 LINK \l "WebBrowser" 14Браузер WebBrowser15


13 LINK \l "Диалоговое_окно_MessageBox" 14Диалоговое окно MessageBox15


13 LINK \l "Графика" 14Графика15


13 LINK \l "Graphics" 14Методы класса Graphics15


13 LINK \l "Построение_граф_объектов" 14Примеры построения графических объектов15


13 LINK \l "Кривая_Безье" 14Кривая Безье15


13LINK \l "Построение_треугольника" \o "Построить треугольник, описать и вписать окружность на C#"14Построение треугольника15


13 LINK \l "Создание_графика_функции" 14Создание графика функции15


13 LINK \l "Диаграммы" 14Диаграммы15


13 LINK \l "Установка_Zedgraph" 14Установка компонента по работе с диаграммами15


13 LINK \l "Основные_методы_Zedgraph" 14Основные методы по работе с компонентом zedGraphControl15


13 LINK \l "Примеры_диаграмм" 14Примеры построения диаграмм15


Лабораторные работы


13 LINK \l "Лаб1" 14Основные элементы управления15


13 LINK \l "лаб2" 14Создание титульной формы15


13 LINK \l "лаб3" 14Дочерние формы, программное меню15


13 LINK \l "лаб4" 14Обработка списков в С#15


13 LINK \l "лаб5" 14Математические функции в C#15


13 LINK \l "лаб6" 14Обработка ошибок15


13 LINK \l "лаб7" 14Панель инструментов15


13 LINK \l "лаб8" 14Таблицы15


13 LINK \l "лаб9" 14Файлы15


13 LINK \l "лаб10" 14Отображение HTML-файлов15


13 LINK \l "лаб11" 14Бестиповые указатели15


13 LINK \l "лаб12" 14Связные списки15


13 LINK \l "лаб13" 14Графика15


13 LINK \l "лаб14" 14Диаграммы15


13 LINK \l "лаб15" 14Диаграммы15. Итоговая работа


13 LINK \l "кр" 14Контрольная работа15


Список литературы




Введение
Язык C# это простой, но в тоже время мощный, строго типизированный и объектно-ориентированный язык, позволяющий программистам создавать разнообразные приложения. В среде Visual C# с помощью платформы .NET Framework возможно создание приложений Windows, веб-служб, средств баз данных, компонентов, элементов управления и многое другое.
При помощи Visual C# можно также создавать консольные приложения с простым пользовательским интерфейсом на основе текста.
Одними из базовых дисциплин в программе подготовки бакалавров по направлениям 010400 «Прикладная математика и информатика» со специализацией «Системное программирование», 090900 «Информационная безопасность» с профилем «Безопасность автоматизированных систем» являются курсы «Объектно-ориентированное программирование» и «Визуальное программирование», содержание которых определяется выписками из государственных образовательных стандартов высшего профессионального образования (ГОС ВПО).
В данном учебном пособии рассматриваются основы создания приложения на языке Visual C# в среде программирования Visual Studio.
Весь материал иллюстрируется примерами программ, написанных на языке С# под Windows на платформе .NET.
Целью данного учебного пособия является ознакомление студентов с современными технологиями разработки приложений баз данных на языке С# под Windows на платформе .NET.
Задачей учебного пособия является раскрытие выделенных дидактических единиц на простых и конкретных примерах использования библиотек классов в Windows-приложениях на основе платформы .NET на языке C#, что позволит студентам освоить базовые принципы и методы технологии программирования на современном уровне и поможет применить их в курсовом и дипломном проектировании и в будущей профессиональной деятельности.
Пособие состоит из трех разделов.
В первом разделе рассматриваются основы программирования на языке C#. В этом разделе представлены основные единицы и конструкции языка. При изложении материала предполагалось, что читатели уже знакомы с основами программирования. Целью данного раздела является ознакомление читателя с принципами программирования на языке C# для успешного проектирования приложений в Visual Studio.
Второй раздел посвящен возможностям среды Visual Studio 2008 по разработке приложений на языке C#. Приводятся описания основных составляющих приложения, проектов, решений, файлов и других объектов. В разделе также рассматриваются принципы работы с мастерами и конструкторами, предоставляемых средой и необходимых для разработки приложений с их помощью.
В третьем разделе приводится подробное описание алгоритмов работы с визуальными компонентами. Все алгоритмы проиллюстрированы на примерах. Большое внимание уделяется работе с графикой. В частности описываются компоненты, классы и методы по созданию статической и динамической графики. Приводятся готовые алгоритмы для построения графиков математических функций и создания графического редактора. В этом же разделе содержится описание библиотеки Zedgraph, предназначенной для построения диаграмм различных видов и их форматирования.
Учебное пособие содержит приложение со списком наиболее часто используемых при разработке приложений элементов управления.
Для усвоения материала рекомендуется самостоятельно воспроизвести учебные примеры, приведенные в пособии, развивать и дополнять их новыми функциями, а также применять изученные положения в практической работе (в курсовом и дипломном проектировании).
Для проверки степени усвоения материала необходимо выполнить лабораторные работы, приведенные в конце учебного пособия. Лабораторные работы представляют собой совокупность заданий по разработке не больших приложений. Каждое приложение содержит элементы управления из предыдущих лабораторных работ и новые компоненты.

Основы программирования на языке С#
Структура программы
Определение. Пространство имен (namespace)  концепция, позаимствованная из C++ и позволяющая обеспечить уникальность всех имен, используемых в конкретной программе или проекте.
Структура программы:
// Подключение пространств имен
using пространство;
...
using пространство;
namespase имя
{
static class Program
{
[STAThread]
//Метод Main - это точка входа в программу
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}
где:
- Application.EnableVisualStyles(); - метод, позволяющий отображать все контролеры в стиле XP.
- Application.SetCompatibleTextRenderingDefault(false); - метод, позволяющий визуализировались одинаково элементы управления, написанные для предыдущих версий .NET Framework.
- Application.Run(new Form1()) ;- метод, осуществляющий запуск приложения с формы Form1.
- Атрибут [STAThread] указывает среде .NET запускать программу в отделенном потоке. Делается это для того чтоб программа корректно взаимодействовала с COM

Типы данных в C#
Прежде чем разговаривать о том, как работать с данными на C#, нужно поговорить о том, какие это могут быть данные.
Простые типы данных в С# составляют:
– Целые типы
Название типа
Диапазон значений
Размер

sbyte
-128...127
Знаковое 8-битное

byte
0255
Беззнаковое 8-битное

short
-32768...32767
Знаковое 16-битное

ushort
065535
Беззнаковое 16-битное

int
-2147483648214748364
Знаковое 32-битное

uint
04294967295
Беззнаковое 32-битное

long
-9223372036854775808 9223372036854775807
Знаковое 64-битное

ulong
018446744073709551615
Беззнаковое 64-битное

– Типы с плавающей точкой
Название типа
Диапазон значений
Число знаков

float
+1.5E-45+3.4E38
7 знаков

double
+5.0E-324+1.7E308
15-16 знаков

decimal
1.0E-28 7.9E28
28-39 значащих цифр

Примечание. Тип Decimal описывает 128-битное число. Он может быть как целым, так и вещественным с большой точностью, что делает его популярным для хранения денежных сумм.
– Символьный тип string;
– Строковый тип char.

Переменные и константы
Данные в C# хранятся в переменных соответствующего типа. C# является языком со строгой типизацией - значит, компилятор гарантирует, что переменная всегда имеет значение своего типа.
Перед применением переменные должны быть объявлены и инициализированы:
Определение. Инициализация переменной - задание начального значения:
переменная=значение;
Или
переменная_1= переменная_2==значение;

Определение. Объявление переменной - выделение памяти:
[область видимости, время жизни] тип переменная_1, переменная_2;

Определение. Описание переменной - объявление+инициализация.
[область видимости, время жизни] тип переменная_1=значение, переменная_2=значение;
Глобальные переменные проекта - это переменные, видимые во всех модулях программы.
Объявить глобальные переменные проекта можно в коде файла program.cs или коде файла любого модуля, например form1.cs.
Пример
namespase имя
{
//класс глобальных переменных
public static class имя
{
Объявление или инициализация глобальных переменных
}
static class Program
{
..
}
}
}
Глобальные переменные модуля - это переменные, видимые во всех методах модуля. Эти переменные следует объявлять или инициализировать непосредственно в модуле после объявления библиотек, например:
using System;

namespace имя_пространства
{
public partial class Form1 : Form
{
//Описание или инициализация глобальных переменных модуля
тип перем;
.
public Form1()
{

}

}
}
Константы
Константы в C# - это члены класса, значения которых определены в течение всего выполнения программы и определяются еще на этапе компиляции. Определение константы производится посредством ключевого слова const:
const int a = 2;

Константы не могут определяться со словом static. Константы могут быть инициализированы как прямо конкретными значениями, так и через другие константы:
const int a = 3;
const int b = a + 7;

Управляющие конструкции
Стандартными управляющими конструкциями в C# являются условный оператор if и циклы for, while. В C# есть дополнительные конструкции: оператор выбора switch, циклы do и foreach.
Условный оператор if..else
Синтаксис:
if (условие)
{
действия, выполняемые в случае истинности условия;
}
else
{
действия, выполняемые в случае ложности условия;
}
Логическое выражение в скобках должно иметь тип bool. Если оно истинно, выполнится первый блок команд, если ложно - второй. При этом если какой-либо блок команд состоит из одной команды, обрамляющие фигурные скобки можно опустить, например:
if (условие) действие;
Цикл с пересчетом параметра - for
Цикл for представляет цикл с инициализирующей командой, условием окончания и командой перехода.
Синтаксис:
for (переменная = начальное_значение; условие окончания цикла; команда изменения параметра)
{
тело цикла
}
Пример:
for (int i = 0; i < items.Count; i++)
{
label1.Text= label1.Text+i.tostring();
}
Пример:
for (int i = 0; i < 10; i++) sum += array[i];
Цикл с предусловием – while
Семантика: проверяем условие перехода. Если оно истинно, то переходим к телу цикла и затем снова к проверке условия, иначе - прекращаем выполнение цикла.
Синтаксис:
// задание начального значения
переменная=значение
// цикл
while (условие с переменной)
{
тело цикла
}
Оператор выбора – switch
Оператор switch является расширенным оператором ветвления, который позволяет в зависимости от значения выражения перейти к выполнению определенного кода. По семантике он эквивалентен набору блоков if, но является более оптимальным.
Синтаксис:
switch (переменная или выражение)
{
case значение_1:
//Операторы, выполняющиеся если переменная = значение_1
break;
case значение_2:
//Операторы, выполняющиеся если переменная = значение_2
break;
.
default:
//Операторы, выполняющиеся, если ни один из явных случаев не подошел
break;
}
Блок «case значение» выполняется, если выражение, указанное в скобках после switch равно заданному значению. Блок default выполняется - если ни одно из case-выражений не выполнилось. Удобно оператор выбора switch использовать для обработки выражений перечислимых типов.
Цикл с постусловием – do
Оператор do реализует цикл с постусловием. Семантика этого цикла аналогична циклу while, но условие выхода проверяется не до итерации, а после.
Синтаксис:
// задание начального значения
переменная=значение
// цикл
do
тело цикла;
while (условие продолжения цикла);
Обычно его используют, когда проверку необходимо выполнить после того, как прошла хотя бы одна итерация.
Оператор перебора коллекции – foreach
Оператор foreach - это оператор, значительно облегчающий работу с коллекциями в C#. Он позволяет перебрать все элементы некоторой коллекции.
Синтаксис:
// задание коллекции
foreach (элемент in коллекция)
{
тело цикла;
}
Пример:
// Получаем некоторый DataSet
DataSet data = GetData();
foreach (Row row in data.Tables[0].Rows)
{
label1.Text= label1.Text+ row["ID"];
}
Оператор foreach перебирает все элементы коллекции и выполняет для каждого тело цикла.

Комментарии
В C# используется два типа комментирования: комментирование блока текста и комментирование строки.
Комментирование блока текста
Чтобы вставить блочный (многострочный комментарий), текст комментария обрамляется символами: /* комментарий */, например:
/* Эта переменная хранит количество элементов */
int count;
Комментирование строки текста
Чтобы закомментировать строку текста (всю или часть) необходимо перед началом комментария поставить символы //, например:
int count; // Эта переменная хранит количество элементов
Внимание. На панели инструментов существуют кнопки: – комментирование выделенного фрагмента и – раскомментирование выделенного фрагмента.

Массивы
В C# имеется три основных типа массивов: одномерные, многомерные и неровные(jagged):
С одномерными массивами все как обычно:
Декларация.
тип[] имя_массива = new тип[длина]
Пример:
int[] A = new int[10];
int[] A = {1, 2, 3, 4, 5};
Доступ. Доступ к элементам производится по номеру элемента (индексу):
Имя_массива[№ элемента]
Пример:
int[] A = new int[10];
A[4]=3;
int x=A[4]*2+1;
Внимание. Элементы нумеруются индексами от 0 до N - 1, где N - размер массива.
Многомерные массивы представляют собой многомерные кубы значений. Элементы таких массивов идентифицируются набором индексов - "координат" в многомерном пространстве. Каждое измерение имеет свою размерность, не зависящую от других.
Декларация. При декларации массива размерности его измерений указываются через запятую:
тип[] имя_массива = new тип[длина1,длина2]
Пример:
int[,] А = new int[10, 20];
int[,] В = {{1, 2}, {3, 4}};

Доступ. Доступ к элементам производится с помощью оператора [], в котором индексы также указываются через запятую:
Имя_массива[№строки, №столбца]
Пример:
int[,] A = new int[10,14];
A[3,4]=3;
int x=A[3,4]*2+1;
Внимание. Элементы нумеруются наборами индексов, каждый из которых может принимать значение от 0 до N - 1, где N - размер соответствующего измерения массива.
Неровные (jagged) массивы - это, по сути, массивы массивов.
Декларация. При декларации неровного массива одна из его размерностей является константой, другая оставляется пустой:
тип имя_массива[][] = new тип[длина1][]
или
тип имя_массива[][] = new тип[][длина2]
Пример:
int А[][] = new int[2][];
А[0] = new int[4];
А[1] = new int[20];
Доступ. Доступ к элементам производится с помощью операторов [], прописываемых подряд для каждого измерения со своим индексом без запятых:
Имя_массива[№строки][№столбца]
Пример:
int element = array[0][1];
Внимание. Неровные массивы похожи на многомерные, но их размеры могут различаться даже в одном измерении. В приведенном примере существует элемент А[1][15], но не существует элемента А[0][15].

Исключения
Исключения служат для обработки ошибок. Исключения были придуманы больше 15 лет назад, стандартный синтаксис исключений берет свое начало от C++.
Допустим, в некотором методе случается ошибка. Что делать? Можно, конечно, прервать процесс без объяснений, но это не является корректным решением, т.к. метод, в котором возникла ошибка, ничего не знает об окружении, в котором он выполняется и, стало быть, не вполне компетентен в выборе стратегии в нештатной ситуации. Правильным решением является выдача сообщения вызывающему методу. В языках без поддержки исключений использовались коды ошибок. Метод (функция) завершался, возвращая "особенное" значение, которое трактовалось как ошибочное. Такой подход является очень неудобным в силу сложности передачи всей информации об ошибке в одном числе.
Исключения в этом смысле стали панацеей. Идея очень проста: если в каком-то методе происходит ошибка, то создается объект, описывающий ее, и генерируется исключение на его основе. При генерации исключения прекращается выполнение текущего блока и идет возврат на более высокий уровень. На нем исключение может быть "поймано" и обработано. Если оно не обрабатывается на более высоком уровне, идет переход еще выше и т.д. пока процесс передачи исключения не дойдет до системного вызова, в котором все исключения обрабатываются.
Синтаксис исключения:
try
{
блок команд, в котором может возникнуть ошибка
}
[catch [(тип_исключения имя_исключения)]
{
блок обработки исключения
}]
[finally
{
команды, которые выполняются в любом случае
}]
Схема работы такой конструкции очень проста - если в блоке try происходит исключение, то идет переход на блок catch и ему это исключение передается в качестве параметра. В любом случае (произошло исключение или нет) в конце вызывается блок команд finally.
Создание собственного исключения:
Исключение создается с помощью команды try, которой передается объект типа Exception, который содержит информацию об исключении. Таким образом, в блоке try исключения могут возникнуть двумя способами - непосредственный вызов команды throw или необработанное исключение в одном из вызываемых методов.
Пример:
public static double Calculate(double f )
{
if (d == 0)
throw new Exception("Функция не определена в 0");
return 1 / d;
}
public static void Main()
{
try
{
double d1=Calculate(2);
double d2=Calculate(0);
double d3=Calculate(1);
}
catch (Exception e)
{
label1.Text="Ошибка: "+e;
}
}
}
При различных типах исключения можно производить различные действия. Для этого используется несколько блоков catch подряд. При этом вызывается первый блок, чей тип исключения соответствует типу пришедшего исключения:
try
{
Calculate(х);
}
catch (DivisionByZeroException e)
{
label1.Text="Деление на ноль"+e;
}
catch (OverflowException e)
{
label1.Text="Неверная область определения "+e;
}
catch (Exception e) // Обработка остальных типов исключения
{
label1.Text="Ошибка: "+e;}

Среда Visual Studio
Среда разработки Visual Studio представляет собой полный набор инструментов для создания как настольных приложений, так и корпоративных веб-приложений для совместной работы групп. Используя эффективные инструменты разработки Visual Studio, основанные на использовании компонентов, и другие технологии, можно не только создавать эффективно работающие настольные приложения, но и упрощать совместное проектирование, разработку и развертывание корпоративных решений.
Программы на C# можно писать и в простом текстовом редакторе (например, в Блокноте) и компилировать (т.е. преобразовывать программный код в набор команд, понятных компьютеру) при помощи так называемого "Компилятора C#", входящего в состав .NET Framework. Однако начинающим программистам рекомендуется использовать Visual C# Express – упрощенную среду для разработки на языке C#. В Visual C# Express есть множество замечательных функций, например, автоматическое создание кода на C#, путем перетаскивания на форму какой-либо кнопки или другого элемента управления. Visual C# Express упростит первые шаги в постижении программирования, а после прочтения курса вы сможете двигаться дальше, постепенно усложняя задачи.

Установка программного обеспечения
Для написания программ на языке C# понадобятся:
Пакет Microsoft .NET Framework 3.5. Это платформа, которая включает все необходимое для создания и запуска программ: библиотеки классов, компоненты и среду, где созданные приложения будут исполняться. Microsoft .NET Framework 3.5 можно бесплатно загрузить на странице [ Cкачайте файл, чтобы посмотреть ссылку ].
Среда разработки, для .Net Framework . Среда разработки необходима для того, чтобы сделать процесс работы максимально удобным. Удачным решением является среда Microsoft Visual C# 2008 Express Edition, установочный пакет можно бесплатно загрузить на сайте Майкрософт: [ Cкачайте файл, чтобы посмотреть ссылку ]. Если установлен пакет Visual C# 2008 Express, который уже содержит .NET Framework, то выполнять пункт 1 не придется.

Общие сведения об основных понятиях платформы .NET Framework
Платформа .NET Framework это интегрированный компонент Windows, который поддерживает создание и выполнение нового поколения приложений и веб-служб XML. При разработке платформы .NET Framework учитывались следующие цели.
Обеспечение согласованной объектно-ориентированной среды программирования для локального сохранения и выполнения объектного кода, для локального выполнения кода, распределенного в Интернете, либо для удаленного выполнения.
Обеспечение среды выполнения кода, минимизирующей конфликты при развертывании программного обеспечения и управлении версиями.
Обеспечение среды выполнения кода, гарантирующей безопасное выполнение кода, включая код, созданный неизвестным или не полностью доверенным сторонним изготовителем.
Обеспечение среды выполнения кода, исключающей проблемы с производительностью сред выполнения сценариев или интерпретируемого кода.
Обеспечение единых принципов работы разработчиков для разных типов приложений, таких как приложения Windows и веб-приложения.
Разработка взаимодействия на основе промышленных стандартов, которое обеспечит интеграцию кода платформы .NET Framework с любым другим кодом.
Двумя основными компонентами платформы .NET Framework являются общеязыковая среда выполнения (CLR) и библиотека классов .NET Framework.
Основой платформы .NET Framework является среда CLR. Среду выполнения можно считать агентом, который управляет кодом во время выполнения и предоставляет основные службы, такие как: управление памятью, управление потоками и удаленное взаимодействие. При этом накладываются условия строгой типизации и другие виды проверки точности кода, обеспечивающие безопасность и надежность. Фактически основной задачей среды выполнения является управление кодом. Код, который обращается к среде выполнения, называют управляемым кодом, а код, который не обращается к среде выполнения, называют неуправляемым кодом.
Другой основной компонент платформы .NET Framework – библиотека классов, представляет полную объектно-ориентированную коллекцию типов, которые применяются для разработки приложений, начиная от обычных, запускаемых из командной строки или с графическим интерфейсом пользователя, и заканчивая приложениями, использующими последние технологические возможности ASP.NET, такие как Web Forms и веб-службы XML.

Контейнеры: проекты и решения
Чтобы эффективно управлять элементами, используемыми на этапе разработки, например ссылками, подключениями данных, папками и файлами, в Visual Studio предусмотрены два типа контейнеров. Эти контейнеры называются решениями и проектами. Также, Visual Studio предоставляет папки решений для того, чтобы структурировать связанные проекты по группам и затем выполнять действия над этими группами проектов.
Проект – это совокупность исходных файлов и связанных метаданных, например ссылки на компонент и инструкции построения. Как правило, при построении проектов создается один или несколько выходных файлов.
Решение – это совокупность одного или нескольких проектов и файлов и метаданных, необходимых для определения приложения в целом.
Частью интегрированной среды разработки (IDE) является интерфейс для просмотра и управления этими контейнерами и связанными с ними элементами Обозреватель решений.
Решения и проекты содержат элементы, которые представляют ссылки, подключения к данным, папки и файлы, необходимые для создания приложения. Решение может содержать несколько проектов, тогда как проект обычно содержит несколько элементов. Эти контейнеры позволяют воспользоваться следующими возможностями интегрированной среды разработки:
управление параметрами для решения в целом или для отдельных проектов;
использование интерфейса Обозреватель решений для управления параметрами файлов при более тщательной работе с элементами, необходимыми для разработки приложения;
добавление необходимых элементов к нескольким проектам в решении или к решению без создания ссылки на эти элементы в каждом проекте;
работа с несколькими файлами, которые независимы от решений или проектов.
Visual Studio автоматически создает решение при создании нового проекта. При необходимости к решению можно добавлять другие проекты. В окне Обозреватель решений содержится графическое представление всего решения, которое позволяет управлять проектами и файлами в процессе разработки решения.

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

Решения как контейнеры
Решения управляют настройкой, сбором и развертыванием связанных проектов. Решение Visual Studio может содержать как один, так и несколько проектов, созданных группой разработки. Для сложного приложения может потребоваться несколько решений.
Решения позволяют сосредоточиться на разработке и развертывании проектов, а не на управлении файлами, компонентами и объектами. Каждое решение Visual Studio позволяет выполнять следующие действия.
Работать с несколькими проектами в пределах одного экземпляра IDE.
Работать с элементами, используя настройки и параметры, применимые ко всему набору проектов.
Использовать интерфейс Обозреватель решений при разработке и развертывании приложения.
Управлять дополнительными файлами вне контекста решения или проекта.
Файл решения
Visual Studio хранит решение в файле: имя_решения.SLN. Этот файл содержит метаданные, которые определяют решение; проекты, связанные с решением; элементы, доступные на уровне решения, которые не связаны с отдельным проектом; конфигурации построения решения.
Проекты как контейнеры
Чтобы помочь пользователям организовывать и выполнять стандартные задачи с применением разрабатываемых элементов, проекты Visual Studio используются как контейнеры в пределах решения. Это позволяет логически управлять, выполнять построение и отлаживать элементы, образующие приложение. На выходе проект, как правило, представляет собой исполняемую программу (EXE), файл библиотеки динамической компоновки (DLL) или модуль (рис.1).

Рисунок 1 – Контейнеры Visual Studio
Проект может быть простым или сложным в зависимости от конкретных требований. Простой проект может содержать форму или HTML-документ, файлы исходного кода и файл проекта. Более сложные проекты могут включать эти же элементы и, кроме того, скрипты баз данных, хранимые процедуры и ссылки на существующие XML (веб-службы)..

Шаблоны проектов
Все продукты разработки Visual Studio содержат несколько предварительно определенных шаблонов элементов. Эти шаблоны можно использовать для создания основного контейнера и предварительного набора элементов, необходимых для разработки приложения, класса, элемента управления или библиотеки. Например, если необходимо создать приложение Windows, проектом будет предложен элемент формы Windows, который можно настроить. Точно так же, если необходимо создать веб-приложение, проектом будет предложен элемент веб-формы.
Использование проектов и их шаблонов позволяет пользователю сосредоточиться на реализации отдельной функции, в то время как проект будет выполнять общее управление и задачи построения. При работе можно либо использовать параметры по умолчанию, либо настроить собственные конфигурации построения.
Можно также создать собственные шаблоны.

Файл проекта
Все шаблоны проекта создают и сохраняют файл проекта, в котором хранятся метаданные, связанные с данным проектом. Расширение и фактическое содержимое файла проекта зависят от типа проекта. Проекты веб-сайта не поддерживают файлы проекта.
Как правило, в файле проекта хранятся настройки конфигурации и построения, заданные для проекта, а также набор элементов. В некоторых проектах ведется список файлов, связанных с проектом, и сохраняется их расположение.
При добавлении элемента к проекту физическое расположение исходного файла на диске также добавляется к файлу проекта. Когда ссылка удаляется из проекта, эти сведения удаляются из файла определения. Шаблон проекта определяет, какие команды доступны для каждого элемента.

Типы и расширения файлов в Visual Studio для С#
Элементы проектов ссылаются на типы файлов, добавляемых в проект. Доступные для разработчика элементы проекта различаются в зависимости от того, с каким проектом он работает с локальным проектом или веб-проектом.
В следующей таблице перечислены некоторые элементы проектов, доступные для локальных проектов.
Элемент проекта
Расширение файла
Назначение элемента проекта

Форма Windows Forms
CS
Форма для создания приложений Windows.

DataSet
XSD
Файл для создания XML-схемы с использованием классов DataSet.

База данных SQL
MDF
Пустая базы данных SQL для локальных данных.

XML-файл
XML
Пустой XML-файл.

Схема XML
XSD
Файл для создания схемы для XML-документов.

HTML-страница
HTM
Страница HTML, которая может включать клиентский код.

Текстовый файл
TXT
Пустой текстовый файл.

XSLT-файл
XSLT
Файл, используемый для преобразования XML-документов.

Файл точечного рисунка
BMP
Пустой файл точечного рисунка, который может использоваться для создания простых изображений.

Файл курсора
CUR
Файл для создания пользовательских курсоров.

Файл значка
ICO
Файл изображения для создания пользовательского значка.

Файл ресурсов
RESX
Файл, используемый для определения и изменения ресурсов приложения.

Файл конфигурации приложения
CONFIG
Файл, используемый для настройки параметров приложения.

Диаграмма классов
CD
Диаграмма классов.

Отчет
RDLC
Новый пустой отчет.

Файл языка JScript
JS
Файл скрипта, содержащий код языка JScript.

Файл языка VBScript
VBS
Файл скрипта, содержащий код языка VBScript.

Сервер скриптов Windows
WSF
Файл, содержащий скрипт, который выполняется как приложение Windows.


Переходы в рамках интегрированной среды разработки
В интегрированной среде разработки предусмотрено несколько способов перемещения между окнами и между файлами в зависимости от предпочтений пользователя или требований проекта. Можно выбрать вариант переключения между файлами в редакторе либо переключения между всеми активными окнами инструментов в интегрированной среде разработки. Также можно непосредственно переходить к любому открытому в редакторе файлу независимо от того, в каком порядке они просматривались. Эти функции могут повысить производительность работы в интегрированной среде разработки.
Перемещение между открытыми файлами
Перемещение между окнами можно осуществлять несколькими способами:
Перемещаться между открытыми окнами можно с помощью команд Назад и Вперед в программном меню Вид.
Для перехода к определенному файлу, открытому в редакторе, независимо от порядка их открытия можно использовать Навигатор IDE, который вызывается с помощью сочетания клавиш CTRL + TAB. Далее удерживая клавишу CTRL и нажимая клавишу со стрелкой (влево или вправо) или TAB несколько раз выделите файл, к которому требуется перейти.. После отпускания клавиши CTRL произойдет автоматический переход к выбранному файлу.

В правом верхнем углу редактора нажмите кнопку Активные файлы, расположенную рядом с кнопкой Закрыть, а затем выберите нужный файл
13 SHAPE \* MERGEFORMAT 1415
Перемещение между окнами инструментов в интегрированной среде разработки
Навигатор IDE также позволяет перемещаться между окнами инструментов, открытыми в среде разработки. Для вызова навигатора IDE, позволяющего переключаться между окнами инструментов в произвольном порядке, необходимо использовать сочетание клавиш ALT + F7. Удерживая клавишу ALT, нажмите клавишу F7 несколько раз, чтобы выделить окно, к которому требуется перейти.

Типы окон и операции над ними
Интегрированная среда разработки содержит два основных типа окон: окна инструментов и окна документов. В поведении этих окон имеются некоторых различия.
Окна инструментов
Окна инструментов перечислены в меню Вид. Они соответствуют текущему приложению и его надстройкам.
Можно настроить следующие параметры окон инструментов в интегрированной среде разработки.
Автоматическое отображение и скрытие
Объединение с другими окнами инструментов для создания групп вкладок
Закрепление по границам интегрированной среды разработки
Плавающее окно

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

Группы вкладок
Группы вкладок упрощают организацию ограниченного рабочего пространства при наличии двух или более открытых документов в интегрированной среде разработки. Можно организовать несколько окон документов и средств в вертикальные или горизонтальные группы вкладок с помощью меню Окно и легко переносить документы из одной группы в другую.

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


Возврат окна инструментов или окна документа в последнее закрепленное расположение
Нажмите клавишу CTRL, дважды щелкая заголовок окна.
Примечание. Двойной щелчок заголовка окна вне интегрированной среды разработки без нажатия клавиши CTRL приводит к развертыванию окна.

Закрепление окон
Окна инструментов можно прикрепить к одной из сторон фрейма интерфейса IDE. При перетаскивании окна инструментов в новое расположение в интегрированной среде разработки появляется маркер в виде ромба. Маркер помогает закрепить окно инструментов на одной из четырех сторон интегрированной среды разработки или во фрейме редактирования.
Примечание. Чтобы переместить закрепляемое окно без его привязки к какому-либо месту, следует при его перетаскивании держать нажатой клавишу CTRL.
На следующей схеме изображены маркеры, которые появляются при перетаскивании окна инструментов или документов к центру интегрированной среды разработки. Маркер на правой стороне появляется только при перетаскивании окна инструмента к краю интегрированной среды разработки.
13 SHAPE \* MERGEFORMAT 1415
Закрепление происходит только, когда курсор мыши совпадает со стрелочкой на маркере и часть окна при этом меняет цвет:


Чтобы закрепить окно инструментов:
Щелкните окно инструментов, которое требуется закрепить.
Перетащите окно к середине окна интерфейса IDE.
Появится маркер в виде ромба. Четыре стрелки ромба указывают на четыре стороны панели редактирования.
Когда перетаскиваемое окно достигнет нужного расположения, наведите указатель на соответствующую часть ромба-маркера. Указанная область будет отображена затемненной.
Чтобы закрепить окно в этом положении, отпустите кнопку мыши.
Например, если обозреватель решений закреплен на правой стороне среды разработки, а вы хотите закрепить его на левой стороне, перетащите обозреватель решений в центр среды разработки, наведите указатель на самую левую стрелку ромба и отпустите кнопку мыши.

Свертывание окон инструментов
Все окна инструментов, названия которых встречаются в меню Вид, поддерживают возможность автоматического скрытия. Автоматическое скрытие сдвигает окно в сторону, когда активно другое окно. Когда окно скрыто, его имя и значок отображаются на вкладке на краю интегрированной среды разработки. Чтобы снова сделать окно активным, наведите указатель на вкладку, и оно вернется в поле зрения.
Чтобы включить автоскрытие:
Щелкните окно, которое необходимо скрыть.
Выберите пункт Автоматически скрывать в меню Окно
или
В правом верхнем углу в заголовке окна нажмите значок канцелярской кнопки :
13 SHAPE \* MERGEFORMAT 1415
В результате окно инструментов будет скрыто, а название появится на вкладке вдоль той границы окна интерфейса IDE, к которой окно инструментов было прижато.
13 SHAPE \* MERGEFORMAT 1415
Чтобы выключить автоскрытие:
Щелкните окно, которое необходимо сделать видимым.
В меню Окно снимите флажок Скрывать автоматически
или
В правом верхнем углу в заголовке окна нажмите значок канцелярской кнопки .

Сброс макетов окон
Чтобы вернуть исходный макет окна для коллекции параметров, воспользуйтесь командой Сброс макета окон. При запуске данной команды происходит следующее.
Все окна перемещаются в исходные позиции.
Будут закрыты окна, закрытые в макете окон по умолчанию.
Окна, открытые в макете окон по умолчанию, будут открыты.

Чтобы сбросить расположения окон в макет по умолчанию:
В меню Окна выберите пункт Сброс макета окон.
В окне сообщения нажмите кнопку Да.

Окно Обозреватель решений
Обозреватель решений позволяет просматривать элементы решения или проекта и осуществлять операции по управлению ими. Он также позволяет использовать редакторы Visual Studio для работы с файлами, не входящими в решение или проект.
Одиночное решение и входящие в него проекты выводятся в окне иерархии, которое содержит обновляемые сведения о состоянии решения, проектов и элементов. Это позволяет работать с несколькими проектами одновременно.
Гибкость окна Обозреватель решений заключается в том, что с файлами можно работать независимо от проектов; можно создавать и редактировать файлы, не входящие в проект. Обозреватель решений показывает эти файлы в папке "Прочие файлы". Также можно работать и с файлами, которые связаны только с решением. Эти файлы находятся в папке "Элементы решения".
Обозреватель решений поддерживает различные команды управления элементами. Для любого конкретного элемента тип проекта определяет допустимые команды управления. Так, например, выбрав файл, входящий в состав веб-проекта Visual C#, можно использовать команду "Удалить" для удаления этого файла.

Элементы управления
Элементы управления, являющиеся компонентами с визуальным представлением (например, кнопки и текстовые поля) можно перетащить мышью в поверхность разработки одного из конструкторов.
Добавление элементов управления
При работе в визуальном режиме конструктор Windows Forms переводит выполняемые действия в исходный код C# и записывает их в файл проекта с именем имя.designer.cs, где имя – имя, назначенное форме. Когда приложение будет выполнено, элементы пользовательского интерфейса будут размещены и скорректированы по размеру таким образом, как они отображаются на поверхности построения.
Задание свойств
После добавления элемента управления на поверхность разработки в окне Свойства можно задать его свойства, такие как цвет фона и текст по умолчанию.
В конструкторе Windows Form значения, задаваемые в окне Свойства, являются начальными значениями, которые будут назначены соответствующему свойству при создании элемента управления во время выполнения.
Во многих случаях доступ к значениям и их изменение возможно программными средствами во время выполнения путем получения и установки свойств в экземпляре класса элемента управления в приложении. Окно Свойство может оказаться полезным во время выполнения, так как с его помощью можно просматривать все свойства, события и методы, поддерживаемые элементом управления.
Обработка событий
Программы с графическим интерфейсом пользователя главным образом основаны на событиях. Такие программы ожидают действий пользователя, например ввода текста в текстовое поле, нажатия кнопки или изменения выбора в поле со списком. При выполнении действия элемент управления, который всего лишь представляет собой экземпляр класса .NET Framework, отправляет событие в приложение. Для обработки события можно написать специальный метод в приложении, который будет вызван при получении события.
В окне Свойства можно указать события, которые должны обрабатываться в коде. Для просмотра событий элемента управления следует выбрать его в конструкторе и нажать кнопку События с изображением молнии ()в панели инструментов окна Свойства.
При добавлении обработчика событий через окно Свойства конструктор автоматически создает пустое тело метода. Чтобы метод выполнил некоторое действие, необходимо написать код. Большинство элементов управления создают много событий, но часто приложению придется обрабатывать лишь часть из них или даже только одно. Например, возможно потребуется обработать событие Click для кнопки, но не ее событие SizeChanged, если только нет необходимости в каких-либо действиях при изменении размера кнопки.

Удаление обработчика события
Создать функцию обработки события можно несколькими способами.
Чтобы создать обработчик события необходимо выполнить одно из следующих действий.
Дважды щелкнуть по компоненту. Внимание, в этом случае автоматически создается обработка только одного события: «Щелчок мыши на этом компоненте в рабочем приложении». Все остальные обработчики создавать этим способом нельзя.
Перейти в окне Свойства компонента в режим События, выбрать необходимое событие и дважды щелкнуть в поле возле него.
В результате будет создан код функции по обработке выбранного события.
Следующим шагом необходимо прописать соответствующие событию команды в теле созданной функции.
Внимание! Функция будет автоматически прописана в файле Имя_формы.Designer.cs. Поэтому простым удалением кода функции из файла Имя_формы.cs избавиться от ненужной функции не удастся.

Чтобы удалить обработчик события необходимо перейти в окне Свойства компонента в режим События, выбрать необходимое событие и удалить его.

Создание кода
Чтобы проще было прописывать методы и свойства используйте встроенный в Visual Studio подсказчик, который вызывается комбинацией клавиш: CTRL+Space (пробел).
В результате появляется окно с набором допустимых в данной ситуации методов, переменных, свойств:

Если подсказчик при нажатии комбинации клавиш Ctrl+пробел не появился, то в выше прописанном коде имеется ошибка. До исправления ошибки в выше прописанном коде подсказчик будет отключен.

Панель элементов
На Панели элементов отображаются значки элементов управления и других элементов, которые можно добавить в проекты Visual Studio.
Чтобы открыть Панель элементов, в меню Вид выберите Панель элементов.
Можно закрепить Панель элементов, зафиксировать ее в открытом состоянии или задать для нее параметр Автоматически скрывать.
Любой значок с Панели элементов можно перетащить в область представления "Конструктор" или вставить в редактор кода интегрированной среды разработки Visual Studio. В обоих случаях в активный файл проекта добавляется базовый код для создания экземпляра элемента, представленного на панели элементов.
Панель элементов показывает только элементы, подходящие к типу файла, в котором работает пользователь. На странице HTML, например, доступны только вкладки HTML и Общие. В форме Windows Form показаны все категории элементов управления Windows Forms. Элементы окна Панель элементов не отображаются при редактировании консольных приложений, так как они обычно создаются без графического пользовательского интерфейса и для требуемой версии .NET Framework. Набор доступных элементов управления также зависит от целевой версии .NET Framework для проекта.
Можно настроить окно Панель элементов, перестанавливая элементы внутри вкладки или добавляя вкладки и элементы.

Вставка элемента с панели элементов в указанное место в активном конструкторе
Дважды щелкните элемент на развернутой вкладке панели элементов.
Сортировка элементов на вкладке панели элементов в алфавитном порядке
В окне Панель элементов щелкните правой кнопкой нужную вкладку и выберите пункт Сортировать элементы по алфавиту.
Примечание. Эта опция устанавливает и убирает заданное свойство.
Отображение значков на панели элементов с надписями или без них
В окне Панель элементов щелкните правой кнопкой нужную вкладку и выберите пункт Список.
Примечание. Эта опция устанавливает и убирает заданное свойство.
Добавление элементов на панель элементов и удаление с нее
В меню Сервис выберите команду Выбрать элементы панели элементов.
Открывается диалоговое окно Выбор элементов панели элементов.
В диалоговом окне Выбор элементов панели элементов можно переключаться между вкладками для просмотра доступных категорий элементов панели элементов.
Если необходимый элемент отсутствует, нажмите кнопку Обзор для добавления элементов в диалоговое окно Выбор элементов панели элементов.
Выберите элементы, которые требуется добавить, и отмените выбор элементов, которые требуется удалить.
Нажмите кнопку ОК.
Значки элементов, выбранных в диалоговом окне Выбор элементов панели элементов, становятся доступны на панели элементов. Добавленные элементы можно перетащить с текущей вкладки на любую другую вкладку.

Окно "Свойства"
Это окно позволяет просматривать и вносить изменения в заданные во время конструирования свойства и события выделенных объектов, расположенных в редакторах и конструкторах. Окно Свойства можно также использовать для просмотра и изменения свойств файлов, проектов и решений. Окно Свойства можно открыть из меню Вид.
Окно Свойства показывает различные типы полей редактирования в зависимости от потребностей конкретного свойства. Среди этих полей поля для ввода, открывающиеся списки и ссылки на пользовательские диалоговые окна редактора. Свойства, отображаемые серым цветом, доступны только для чтения.
Окно Свойства может отображать разную информацию и в разных режимах, в зависимости от того какой из следующих режимов выбран:
Имя объекта

В этом списке перечисляются выбранные объекты. Отображаются только объекты активного редактора или конструктора. Если выбрано несколько объектов, будут отображаться общие для всех объектов свойства.
По категориям ()
Перечисляются все свойства и их значения для выбранного объекта по категориям. Чтобы сократить количество отображаемых свойств, можно свернуть категорию. При развертывании или свертывании категории слева от ее имени отображается знак "плюс" (+) или "минус" (-). Категории перечислены в алфавитном порядке.
По алфавиту ()
В этом режиме все свойства и события для выбранных объектов, доступные при проектировании, сортируются по алфавиту. Чтобы изменить значение незатененного свойства, щелкните ячейку справа от него и введите изменения.
Страницы свойств
В окне Свойства можно отображать Страницу со свойствами или методами для выделенного элемента:
Свойства ()
Перечисляются свойства объекта. Во многих объектах есть события, которые можно увидеть в окне Свойства.
События ()
Отображаются события объекта.
В нижней части окна Свойства находится Область описаний.
13 SHAPE \* MERGEFORMAT 1415
В этой области приводится тип свойства и краткое его описание. Для включения и отключения описания свойства можно использовать команду Описание в контекстном меню к этой области.
13 SHAPE \* MERGEFORMAT 1415
Создание приложений Windows Forms
Технология Windows Forms специально создана для быстрой разработки приложений, в которых обширный графический пользовательский интерфейс не является приоритетом. Для создания пользовательского интерфейса используется конструктор Windows Forms.
Так как формы являются основной частью приложения, важно уделять особое внимание их внешнему виду и функциям. В конечном счете, форма представляет собой пустую доску, которую разработчик оснащает элементами управления, формируя интерфейс пользователя, и кодом для управления данными.

Операции над проектами Windows
Создание проекта приложения Windows
Чтобы создать новый проект приложения Windows выполните следующие действия:
На вкладке Начальная страница Выберите команду Создать проект в меню Файл или в окне Последние проекты:
13 SHAPE \* MERGEFORMAT 1415
В результате откроется окно Создать проект
В области Шаблоны выберите Приложение Windows Forms.
В текстовом поле Имя присвойте проекту уникальное имя, соответствующее назначению приложения.
Нажмите ОК.
В результате откроется конструктор Windows Forms, отображающий форму Form1 созданного проекта.
Сохраните созданный проект.

Сохранение проекта Windows Forms
Чтобы сохранить все составляющие проекта приложения Windows выполните следующие действия:
Выберите команду Сохранить все в меню Файл:
В результате откроется окно Сохранить проект.
В поле Расположение выберите из списка папку, в которой необходимо сохранить проект. При необходимости можно нажать кнопку Обзор для поиска требуемой папки. Если папка отсутствует, то следует включить команду Создать каталог для решения. Если папка для проекта на момент сохранения уже существует, то команду Создать каталог для решения включать не следует.

Закрытие проекта
Чтобы закрыть проект выберите в программном меню Файл команду Закрыть решение.

Открытие проекта
Открыть проект можно несколькими способами.
Чтобы открыть проект выполните одно из следующих действий.
Щелкните по названию проекта на начальной странице Visual C# в области Последние проекты
Выберите команду Открыть Проект в области Последние проекты.
Двойным щелчком по файлу Имя_проекта.sln запустите проект в программе Мой компьютер.

Запуск проекта
Запуск проекта можно осуществить несколькими способами.
Чтобы запустить проект выполните одно из следующих действий:
Нажмите клавишу F5.
Выберите в программном меню Отладка команду Начать отладку.
В результате будет произведена компиляция проекта и при отсутствии ошибок запуск проекта.

Создание решения
Создать готовое решение можно несколькими способами.
Чтобы создать готовое решение выполните одно из следующих действий:
Нажмите клавишу F6.
Выберите в программном меню Построение команду Построить решение.
Внимание. Перед построением решения проект должен быть откомпилирован и апробирован его запуск.

Исправление ошибок
Если в процессе создания проекта допускаются ошибки в коде, то сообщения о них по мере их возникновения незамедлительно отображаются в отдельной вкладке, которая по умолчанию располагается в нижней части рабочей области проекта, а ошибочная лексема подчеркивается красной волнистой линией.
13 SHAPE \* MERGEFORMAT 1415
Перевести курсор на лексему с ошибкой можно, щелкнув дважды по красному кружочку слева от порядкового номера ошибки.
Если вкладка с ошибками отсутствует, то чтобы ее отобразить выберите в программном меню Вид команду Список ошибок.

Задание значка приложения
Свойство Icon проекта указывает значок файла (ICO), который будет отображаться в скомпилированном приложении в проводнике и панели задач Windows.
Свойство Icon доступно в области Приложение в Конструкторе проектов; оно содержит список значков, которые были добавлены к проекту как ресурсы или как файлы с содержимым.
Чтобы указать значок приложения и добавить его к проекту
Выбрав проект в Обозревателе решения, в меню Проект выберите команду свойства.
Перейдите в область Приложение.
Нажмите кнопку <Обзор...>, в раскрывающемся списке Значок и манифест найдите расположение требуемого файла значка.
Значок файла добавляется в проект в виде файла с содержимым.

Работа с формами
Создание формы Windows Forms
Для приложения Windows могут понадобиться несколько форм, помимо основной. В .NET Framework можно легко добавлять диалоговые окна, экраны запуска и другие формы поддержки.
Чтобы добавить форму Windows Forms, которая наследуется из класса Form, выполните следующие действия.
Выберите команду Форма Windows одним из следующих способов:
в окне Обозреватель решений в контекстном меню к имени проекта выберите Добавить и затем команду Форма Windows;

в программном меню Файл команду Добавить форму Windows;

Добавить форму Windows
на панели инструментов нажмите кнопку Добавить новый элемент:


и далее выберите команду Добавить форму Windows:

c помощью комбинации клавиш Ctrl+Shift+A.
В результате откроется окно Добавление нового элемента.
В области Шаблоны выберите Форма Windows.
В поле Имя введите имя новой формы.
Нажмите кнопку Добавить.

Исключение формы из проекта
Чтобы исключить форму из проекта в окне Обозреватель решения в контекстном меню к файлу имя_формы.cs выберите команду Исключить из проекта.
Примечание. После выполнения команды форма будет исключена из проекта, но все файлы для этой формы сохранятся в папке проекта и поэтому форма может быть успешно восстановлена в будущем в данном проекте или добавлена в другой проект.

Удаление формы из проекта
Чтобы удалить форму из проекта в окне Обозреватель решения в контекстном меню к файлу имя_формы.cs выберите команду Удалить.
Внимание. Не игнорируйте сообщение об удалении.После нажатия кнопки Ок в выданном сообщении файлы формы будут не только исключены из проекта, они будут физически удалены без возможности восстановления.
Добавление формы в проект
Чтобы добавить форму в проект выполните следующие действия.
Выберите в меню Проект команду Существующий элемент
В открывшемся окне Добавление существующего элемента выберите файл формы имя_формы.cs.
Нажмите кнопку Добавить.
Примечание. Файл будет добавлен вместе со вспомогательными файлами настройки и другими метаданными.

Создание дочерней формы
Дочерняя форма (MDI-форма) – это форма, которая существует в пределах другой формы (родительской) и до тех пор, пока не будет закрыта или сама дочерняя форма или родительская. Открыть дочернюю форму без родительской формы невозможно. Переместить дочернюю форму за пределы родительской формы невозможно.
Чтобы создать дочернюю форму выполните следующие действия:
Выберите форму, которая должна стать родительской.
В окне Свойства этой формы присвойте свойству IsMdiContainer значение true.
Создайте новую форму.
Вставьте в обработчик события открытия новой формы код:
private void button1_Click(object sender, EventArgs e)
{
//Создание переменной формы
Form3 frm_child = new Form3();
//Присваивание форме в качестве родителя текущую форму
frm_child.MdiParent = this;
//Открытие формы
frm_child.Show();
}
Примечание. Чтобы предотвратить повторное создание дочерней формы при уже открытой, выше прописанный код следует изменить:
Создайте глобальную переменную дочерней формы (см. п.3.2.6.3)
Вставьте в обработчик события открытия новой формы код:
private void button1_Click(object sender, EventArgs e)
{
if (glob.frm_child == null)
{
glob.frm_child = new Form3();
glob.frm_child.MdiParent = this;
glob.frm_child.Show();
}
}
Создать обработчик события закрытия дочерней формы FormClosed:
private void Form3_FormClosed(object sender, FormClosedEventArgs e)
{
glob.frm_child = null;
}
В этой функции глобальной переменной дочерней формы присваивается значение null, фактически освобождая память.

Настройка формы
Все действия по изменению внешнего вида формы производятся с помощью команд, отображаемых в окне Свойства в рабочей области проекта. Для отображения окна Свойства необходимо выбрать в контекстном меню к форме команду Свойства.
В результате открывается окно со свойствами формы.
В верхней строке окна Свойства жирным шрифтом прописывается имя компонента, свойства которого отображаются в этом окне. Справа от имени отображается класс, которому принадлежит данный компонент.
Внимание. В конструкторе форм можно изменять размеры формы, но нельзя менять ее местоположение.
Чтобы отобразить форму Windows Forms в конструкторе дважды щелкните форму в Обозревателе решений.

Просмотр кода для формы
Перейти к коду для формы можно одним из следующих способов:
В Обозревателе решений выберите форму и нажмите кнопку Просмотреть код.

В Обозревателе решений в контекстном меню к форме выберите пункт Перейти к коду.
Если фокус находится в конструкторе, нажмите клавишу F7 для переключения в режим Редактор кода.
[ Cкачайте файл, чтобы посмотреть картинку ]Примечание
Двойной щелчок формы или ее элемента управления в конструкторе также переключает в режим Редактора кода, но при этом добавляет обработчик событий по умолчанию для этого элемента управления. Например, двойной щелчок элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ] приводит к отображению Редактора кода и добавляет обработчик событий Button_Click.

Создание глобальной переменной класса Form
Пусть имеется форма Form1. Обратиться программно в коде непосредственно к Form1 в С# нельзя. Form1 – это класс. Для обращения к форме необходимо завести переменную этого класса.
Создать глобальную переменную для формы можно несколькими способами:
Способ1 Создать глобальную переменную класса Form, а далее при инициализации прописать ее принадлежность классу Form1.
Чтобы создать глобальную переменную формы этим способом необходимо
в пространстве решения в любом месте после описания формы прописать код
public class имя_класса
{
public static Form имя_переменной;
}

например:
namespace Metodichka
{
.
public class glob
{
public static Form frm;
}
}
Провести инициализацию переменной:
glob.frm = new Form1();
Способ2 Создать сразу переменную заданного класса:
public class имя_класса
{
public static Form имя_перем = new имя_класса_формы();
}
Пример:
public class glob
{
public static Form frm=new Form1();
}

Переименование формы
Для переименования формы необходимо изменить значение свойства Text в окне Свойства.
Программным путем переименование формы можно произвести с помощью команды:
Имя_переменной_формы.Text = "Новое название";
Пример:
glob.frm.Text = "Моя первая форма";
Примечание. Исключение составляет начальная форма.
Чтобы переименовать программным способом начальную форму необходимо переменную этой формы создать в файле program.cs, например:
namespace Metodichka
{// Создаем глобальную переменную
public static class glob
{
public static Form frm1;
}

static class Program
{
..
static void Main()
{
Application.EnableVisualStyles();
// инициализируем переменную
glob.frm1 = new Form1();
//запускаем проект
Application.Run(glob.frm1);
}
}
}

Установка расположения форм Windows Forms на экране
Чтобы указать место расположения формы на экране компьютера, можно задать значения для свойства [ Cкачайте файл, чтобы посмотреть ссылку ]. Это свойство определяет положение верхнего левого угла формы (в точках). Также необходимо задать свойство [ Cкачайте файл, чтобы посмотреть ссылку ], чтобы определить границы отображаемой области.
[ Cкачайте файл, чтобы посмотреть картинку ]Примечание
Помните, что размер экрана и разрешение очень часто различаются в зависимости от системы пользователя. Помимо этого на системах с несколькими мониторами могут возникнуть трудности при определении границ отображаемой области. Эти две ситуации довольно часто будут приводить к непредсказуемому расположению формы, несмотря на значение свойства [ Cкачайте файл, чтобы посмотреть ссылку ]. По этой причине значение по умолчанию для свойства [ Cкачайте файл, чтобы посмотреть ссылку ] в приложении Windows – [ Cкачайте файл, чтобы посмотреть ссылку ]. Это значение приводит к тому, что операционная система сама вычисляет наилучшее расположение формы при запуске на основе существующего оборудования. Другой способ – задать для свойства [ Cкачайте файл, чтобы посмотреть ссылку ] значение Center и затем изменять расположение формы в коде.
Чтобы задать положение форм с помощью окна "Свойства":
В окне Свойства выберите форму из раскрывающегося списка. Присвойте свойству [ Cкачайте файл, чтобы посмотреть ссылку ] формы значение [ Cкачайте файл, чтобы посмотреть ссылку ].
Задайте значения для свойства [ Cкачайте файл, чтобы посмотреть ссылку ], разделенные запятыми, чтобы определить положение формы. Первое значение (X) – расстояние от левой границы площади отображения, а второе значение (Y) – расстояние от верхней границы площади отображения.
[ Cкачайте файл, чтобы посмотреть картинку ]Примечание
Разверните свойство [ Cкачайте файл, чтобы посмотреть ссылку ], чтобы ввести значения свойств [ Cкачайте файл, чтобы посмотреть ссылку ] и [ Cкачайте файл, чтобы посмотреть ссылку ] по отдельности.
Задать положение формы программными средствами можно двумя способами:
Определите расположение формы во время выполнения, присвоив свойству [ Cкачайте файл, чтобы посмотреть ссылку ] формы значение [ Cкачайте файл, чтобы посмотреть ссылку ], как показано в следующем примере.
Имя_переменной_формы.StartPosition = FormStartPosition.Manual;
Имя_переменной_формы.Location = new Point(X, Y);
Пример:
glob.frm1.StartPosition = FormStartPosition.Manual;
glob.frm1.Location = new Point(500, 500);
Измените координату X или координату Y расположения формы с помощью подчиненных свойств [ Cкачайте файл, чтобы посмотреть ссылку ] (для координаты X) и [ Cкачайте файл, чтобы посмотреть ссылку ] (для координаты Y).В следующем примере для координаты X формы задается значение 300 пикселей.
glob.frm1.StartPosition = FormStartPosition.Manual;
glob.frm1.Left = 300;
[ Cкачайте файл, чтобы посмотреть картинку ]Примечание
Вместо свойства [ Cкачайте файл, чтобы посмотреть ссылку ] можно использовать свойство [ Cкачайте файл, чтобы посмотреть ссылку ] для задания расположения формы. С помощью этого свойства можно определить расположение формы относительно панели задач. Это полезно в том случае, если панель задач закреплена на экране пользователя сверху или слева. Закрепление панели задач таким способом скрывает координаты рабочего стола (0,0).Форма, для которой свойство [ Cкачайте файл, чтобы посмотреть ссылку ] имеет значение (0,0), всегда отображается в левом верхнем углу основного монитора перед панелью задач. Свойство [ Cкачайте файл, чтобы посмотреть ссылку ] не отображается в окне "Свойства" и может быть задано только в коде.
Выбор начальной формы в приложении Windows
Форма, созданная при выборе приложения Windows в диалоговом окне Новый проект, по умолчанию становится начальной формой. При запуске проекта первой на экране появляется начальная форма. При закрытии начальной формы автоматическе происходит завершение работы проекта. В проекте всегда одна начальная форма.
Чтобы сменить начальную форму необходимо прописать в коде следующие команды:
Перейдите в окне Обозреватель решения в модуль program.cs.
Объявите глобальную переменную формы:
public static class имя_класса
{
public static Form имя_переменной;
}
Пропишите команду идентификации глобальной переменной, присвоив переменной начальную форму, например:
Имя_класса.имя_переменной = new Form№();
Измените команду запуска проекта, прописав в ней в качестве аргумента глобальную переменную форму:
Application.Run(Имя_класса.имя_переменной);
В результате код модуля program.cs должен выделить примерно так:
namespace Metodichka
{// Создаем глобальную переменную
public static class glob
{
public static Form frm1;
}

static class Program
{
..
static void Main()
{
Application.EnableVisualStyles();
// инициализируем переменную
glob.frm1 = new Form1();
//запускаем проект
Application.Run(glob.frm1);
}
}
}

Настройка размера формы Windows Forms
Размер формы Windows Forms можно указать несколькими способами. Можно изменить высоту и ширину формы программными средствами, задав новое значение свойства [ Cкачайте файл, чтобы посмотреть ссылку ] или изменив свойства [ Cкачайте файл, чтобы посмотреть ссылку ] и [ Cкачайте файл, чтобы посмотреть ссылку ] по отдельности. Если используется Visual Studio, можно изменить размеры с помощью конструктора Windows Forms.
Изменить размер формы программными средствами можно двумя способами:
Задайте для формы свойство [ Cкачайте файл, чтобы посмотреть ссылку ], например:
Имя_переменной_формы.Size = new System.Drawing.Size(ширина, высота);
Пример:
glob.frm2.Size = new System.Drawing.Size(300, 300);
Измените высоту или ширину с помощью свойств [ Cкачайте файл, чтобы посмотреть ссылку ] или [ Cкачайте файл, чтобы посмотреть ссылку ], например:
Имя_переменной_формы.Width = 300;

Добавление фоновых изображений в формы Windows Forms.
При создании форм Windows Forms иногда нужно поместить фоновый рисунок на элемент управления или на саму форму. Для этого можно использовать настройки, задаваемые в окне Свойства.
Чтобы добавить фоновый рисунок в форму Windows Forms, выполните следующие действия.
Щелкните свойство [ Cкачайте файл, чтобы посмотреть ссылку ] в окне Свойства формы. Нажмите кнопку с многоточием ([ Cкачайте файл, чтобы посмотреть картинку ]) для открытия диалогового окна Выбор ресурса.
Щелкните Импорт для открытия диалогового окна Открытие файла. Перейдите в папку, в которой находится файл рисунка (с расширением BMP). Нажмите кнопку Открыть, чтобы открыть файл.
Обратите внимание, что выбранный файл теперь находится в списке Файла ресурсов проекта, а рисунок отображается в окне Предварительный просмотр.
Нажмите кнопку ОК, чтобы импортировать рисунок как ресурс. Обратите внимание, что теперь рисунок будет отображаться в форме. Управлять внешним видом рисунка в форме можно с помощью свойства [ Cкачайте файл, чтобы посмотреть ссылку ].
Обратите внимание, что в проекте появилась папка Ресурсы (в обозревателе решений), в которую скопирован рисунок.
Примечание. Если выбрать Локальный ресурс, то папка Resoures не будет создана, а в проекте будет храниться ссылка на файл с рисунком. При выборе опции Файл ресурсов проекта создается в папке с проектом новая папка под названием Resoures, в которую копируется выбранных графический файл.
Чтобы удалить фоновый рисунок из формы Windows Forms в окне Свойства щелкните правой кнопкой мыши кнопку с многоточием ([ Cкачайте файл, чтобы посмотреть картинку ]) для свойства [ Cкачайте файл, чтобы посмотреть ссылку ] и выберите Сброс.


Отображение модальных и немодальных форм Windows Forms
Формы и диалоговые окна могут быть модальными и немодальными. Модальная форма или диалоговое окно должно быть закрыто или спрятано перед продолжением работы с другими формами приложения.
Диалоговые окна, в которых отображаются важные сообщения, должны всегда быть модальными.
Немодальные формы позволяют переключаться между формами без необходимости закрывать начальную форму. Пока отображается форма, пользователь может продолжать работу в любом другом месте приложения.
Чтобы отобразить форму как модальное диалоговое окно вызовите метод [ Cкачайте файл, чтобы посмотреть ссылку ].
В следующем примере кода показан способ отображения модального диалогового окна.
glob.frm2.ShowDialog();
В методе [ Cкачайте файл, чтобы посмотреть ссылку ] существует необязательный аргумент owner, который можно использовать в форме для определения отношения "главный-подчиненный". Например, когда с помощью кода в главной форме отображается диалоговое окно, в качестве значения аргумента owner диалогового окна можно передать значение this, чтобы определить, что главная форма является владельцем. Это показано в следующем примере.
glob.frm2.ShowDialog(this);
Чтобы отобразить форму как немодальное диалоговое окно вызовите метод [ Cкачайте файл, чтобы посмотреть ссылку ].
В следующем примере показан способ отображения диалогового окна в немодальном формате.
glob.frm2.Show();
[ Cкачайте файл, чтобы посмотреть картинку ]Примечание.
При отображении модальной формы код, следующий после метода [ Cкачайте файл, чтобы посмотреть ссылку ], не выполняется до тех пор, пока не будет закрыто диалоговое окно. При отображении немодальной формы код, следующий после метода [ Cкачайте файл, чтобы посмотреть ссылку ], выполняется немедленно после отображения формы.

Создание прозрачных форм Windows Forms
В операционной системе Microsoft Windows XP существует возможность управления прозрачностью отображаемых окон. Свойство [ Cкачайте файл, чтобы посмотреть ссылку ] позволяет управлять прозрачностью формы.
[ Cкачайте файл, чтобы посмотреть картинку ]Примечание.
Так как прозрачность форм поддерживается только начиная с операционной системы Windows 2000, формы Windows Forms останутся совершенно непрозрачными при запуске в старых операционных системах, например в Windows 98, независимо от значения свойства [ Cкачайте файл, чтобы посмотреть ссылку ].
Чтобы управлять прозрачностью Windows Forms в окне Свойства для формы в свойстве [ Cкачайте файл, чтобы посмотреть ссылку ] задайте значение в диапазоне от 0,0 (полная прозрачность) до 1,0 (полная непрозрачность).
Чтобы управлять прозрачностью Windows Forms программными средствами в теле метода для свойства [ Cкачайте файл, чтобы посмотреть ссылку ] задайте значение в диапазоне от 0,0 (полная прозрачность) до 1,0 (полная непрозрачность). Свойство [ Cкачайте файл, чтобы посмотреть ссылку ] является типом значения [ Cкачайте файл, чтобы посмотреть ссылку ], например:
glob.frm2.Opacity = 0.6;

Изменение границ формы Windows Forms с помощью конструктора
При определении внешнего вида формы Windows Forms предлагается несколько стилей границ. Изменяя свойство [ Cкачайте файл, чтобы посмотреть ссылку ] можно управлять поведением формы в отношении изменения размеров. Кроме того, с помощью свойства [ Cкачайте файл, чтобы посмотреть ссылку ] можно определить вид строки заголовка, а также кнопки, которые должны в ней появиться.
Чтобы определить стиль границы Windows Forms в режиме конструктора в окне Cвойства формы задайте для свойства [ Cкачайте файл, чтобы посмотреть ссылку ] выбранный стиль.
[ Cкачайте файл, чтобы посмотреть картинку ]Примечание. Выбор стиля границы определяет наличие кнопок Свернуть и Развернуть в строке заголовка. По умолчанию кнопки Свернуть и Развернуть включены. Функциональные возможности этих кнопок определяются в окне Свойства.
Чтобы отключить кнопки свертывания и развертывания в Windows Forms в окне Свойства формы выберите у свойств [ Cкачайте файл, чтобы посмотреть ссылку ] или [ Cкачайте файл, чтобы посмотреть ссылку ] значение false.
В зависимости от заданного свойства соответствующая кнопка будет присутствовать, но останется нерабочей.
Чтобы определить стиль границы Windows Forms программными средствами присвойте свойству [ Cкачайте файл, чтобы посмотреть ссылку ] требуемое значение стиля. В следующем примере кода для стиля границы формы frm2 задается значение [ Cкачайте файл, чтобы посмотреть ссылку ].
glob.frm2.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;

Переход между формами
При добавлении формы Windows Forms в проект эта новая форма по умолчанию не отображается во время выполнения.
Чтобы перейти из формы1 на форму2 необходимо:
Объявить глобальную переменную в пространстве решения в любом месте, например:
namespace Metodichka
{
.
public class glob
{
public static Form frm;
}
}
прописать процедуру открытия формы2 в модуле Form1.cs, например:
private void toolStripMenuItem2_Click(object sender, EventArgs e)
{
if (glob.frm == null)
{
glob.frm = new Form2();
glob.frm.Show();
};
}
прописать процедуру закрытия формы2 в модуле Form2.cs, например:
private void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
glob.frm = null;
}

Cкрытие и закрытие форм
Чтобы скрыть форму вызовите метод [ Cкачайте файл, чтобы посмотреть ссылку ].
В следующем примере кода показан способ скрытия формы frm1.
glob.frm1.Hide();
Внимание. При скрытии начальной формы вы не сможете без дополнительных команд закрыть приложение. Поэтому одновременоо с методом Hide для начальной формы прописывается команда ее открытия, привязанная к некоторому событию.
Пример: Можно передать функцию закрытия приложения другой форме. Для этого в событии FormClosed для этой формы необходимо прописать метод Show для начальной фомы.
private void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
glob.frm1.Show();
}
Чтобы закрыть форму вызовите метод [ Cкачайте файл, чтобы посмотреть ссылку ].
В следующем примере кода показан способ закрытия формы frm1.
glob.frm1.Close();
Примечание1. При закрытии начальной формы будет закрыто приложение.
Примечание2. При закрытии формы происходит ликвидация файловой переменной. Если закрытаяформа не является начальной и предполагается форму открывать неоднократно, то при открытии формы должны быть прописаны два метода: Show и new Form, например:
glob.frm2 = new Form2();
glob.frm2.Show();

Работа с элементами управления Windows Forms
Элемент управления это компонент на форме, использующийся для отображения сведений или ввода пользовательских данных. В ходе разработки и изменения пользовательского интерфейса приложений Windows Forms требуется добавлять, выравнивать и размещать элементы управления. Каждый тип элемента управления имеет собственный набор свойств, методов и событий, соответствующих определенному назначению. С элементами управления можно работать в конструкторе или добавлять их динамически во время выполнения с помощью кода.
Существуют разнообразные элементы управления, которые можно разместить в Windows Forms в зависимости от требований конкретного приложения.
Добавление элементов управления в формы Windows Forms
Большинство форм разрабатываются путем добавления элементов управления на поверхность формы с целью создания пользовательского интерфейса.
Чтобы нарисовать элемент управления в форме, выполните следующие действия.
Откройте форму.
В панели элементов щелкните элемент управления, который требуется добавить в форму.
Щелкните место в форме, где должен располагаться левый верхний угол элемента управления, а затем перетащите указатель мыши на место, в котором должен располагаться правый нижний угол элемента управления.
Элемент управления добавляется на форму в указанное место с указанными размерами.
[ Cкачайте файл, чтобы посмотреть картинку ]Примечание. Для каждого элемента управления существует размер, определенный по умолчанию. На форму можно добавить элемент управления, который будет иметь размер по умолчанию. Для этого требуется перетащить элемент управления из панели элементов на форму.
Чтобы перетащить элемент управления в форму, выполните следующие действия.
Откройте форму.
В панели элементов щелкните требуемый элемент управления и перетащите его в форму.
Элемент добавляется в форму в указанное место с размером по умолчанию.
[ Cкачайте файл, чтобы посмотреть картинку ]Примечание. Чтобы добавить элемент управления с размером по умолчанию в верхний левый угол формы, щелкните его два раза в панели элементов.
Можно также добавлять элементы управления на форму динамически во время выполнения. В приведенном ниже примере элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] (текстовое поле) будет добавлен на форму после щелчка элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ] (кнопка).
[ Cкачайте файл, чтобы посмотреть картинку ]Примечание. Для следующей процедуры требуется форма с уже расположенным в ней элементом управления Кнопка Button1.
Чтобы добавить элемент управления в форму с помощью программных средств, необходимо в метод, который обрабатывает событие (например, Click для кнопки) в результате которого должен быть добавлен элемент управления, добавить код, идентичный приведенному ниже. В коде прописаны команды: добавление ссылки на переменную элемента управления, задание расположения (свойство Location) элемента управления и добавления самого элемента управления.
private void button1_Click(object sender, System.EventArgs e)
{
TextBox myText = new TextBox();
myText.Location = new Point(25,25);
this.Controls.Add (myText);
}

Изменение размера элементов управления в формах Windows Forms
Можно изменить размер отдельных элементов управления или набора элементов управления одного или разных типов, например, элементов управления [ Cкачайте файл, чтобы посмотреть ссылку ] (кнопка) и [ Cкачайте файл, чтобы посмотреть ссылку ] (группа переключателей).
Чтобы изменить размер элемента управления щелкните элемент управления, размер которого следует изменить, и потяните за один из восьми маркеров изменения размера.
[ Cкачайте файл, чтобы посмотреть картинку ]Примечание. Выберите элемент управления и нажмите клавиши со стрелками, удерживая нажатой клавишу SHIFT для изменения размера элемента управления на одну точку за раз. Нажмите клавиши со стрелками ВНИЗ или ВПРАВО, удерживая нажатыми клавиши SHIFT и CTRL, чтобы изменить размер элемента управления на большую величину.
Чтобы изменить размер нескольких элементов управления в форме
Удерживайте нажатой клавишу CTRL или SHIFT и выберите элементы управления, размер которых следует изменить. Для всех элементов управления используется размер первого выбранного элемента управления.
В меню Формат выберите Сделать одного размера и выберите один из трех параметров: По ширине, По высоте, Оба. Эти три команды изменяют размеры элементов управления так, чтобы они соответствовали размерам первого выбранного элемента управления.

Определение текста, отображаемого элементом управления Windows Forms
На элементах управления форм Windows Forms обычно отображается текст, связанный с их основной функцией. Например, элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] (кнопка) обычно имеет заголовок, указывающий, какое действие выполняется при нажатии этой кнопки. Для любого элемента управления можно задавать или возвращать текст, используя свойство [ Cкачайте файл, чтобы посмотреть ссылку ]. Можно изменить шрифт, используя свойство [ Cкачайте файл, чтобы посмотреть ссылку ].
Чтобы задать текст, отображаемый на элементе управления, программно свойству [ Cкачайте файл, чтобы посмотреть ссылку ] присвойте строковое значение.
Чтобы создать сочетание клавиш и подчеркнуть соответствующую ему букву, вставьте знак & перед этой буквой.
Чтобы изменить стиль написания текста программно для свойства [ Cкачайте файл, чтобы посмотреть ссылку ] задайте тип объекта [ Cкачайте файл, чтобы посмотреть ссылку ]("шрифт", размер,стиль, единицы измерения размера).
Пример: Для создания кнопки:

необходимо прописать код:
button7.Text = "&Формат кнопки";
button7.Font = new Font("Monotype Corsiva", 14, FontStyle.Italic, GraphicsUnit.Point);

Определение клавиш доступа для элементов управления Windows Forms
Буква, используемая в сочетании клавиш, подчеркивается в названии меню, в пункте меню или в метке элемента управления, например кнопки. С помощью сочетания клавиш пользователь может "нажать" кнопку, нажав одновременно клавишу ALT и клавишу с указанной буквой. Например, если кнопка запускает процесс печати формы и ее свойство Text имеет значение "Print", то можно добавить амперсанд (&) перед буквой "P", чтобы эта буква была подчеркнута в тексте кнопки в режиме выполнения. Пользователь может выполнить команду, связанную с кнопкой, нажав сочетание клавиш ALT+P. Невозможно назначить букву сочетания клавиш для элемента управления, который не может получить фокус.
Чтобы создать букву сочетания клавиш для элемента управления укажите в качестве свойства Text строку, содержащую знак & перед буквой, которая будет использоваться в сочетании клавиш, например:
button1.Text = "&Print";

Добавление элементов управления, для которых не существует пользовательского интерфейса, в формы Windows Forms
Среди элементов управления форм Windows Forms существуют невидимые элементы (компоненты). В отличие от других элементов управления, эти компоненты не предоставляют интерфейс пользователя и, таким образом, не нуждаются в отображении в рабочей области конструктора Windows Forms. При добавлении невидимого компонента в форму конструктор Windows Forms отображает область невидимых компонентов внизу формы. После добавления элемента управления в область компонентов можно выделить компонент и задать его свойства, как для любого другого элемента управления в форме.
Чтобы добавить компонент в форму Windows Forms, выполните следующие действия:
Откройте форму.
В панели элементов щелкните компонент и перетащите его в форму.
Компонент появится в области невидимых компонентов.
Невидимые компоненты можно добавлять на форму во время выполнения.
Чтобы добавить компонент в Windows Forms программными средствами, выполните следующие действия.
Создайте экземпляр класса требуемого элемента управления в коде.
Задайте свойства, необходимые для добавляемого элемента управления.
Настройте другие нужные свойства компонента.
Следующий код демонстрирует создание объекта [ Cкачайте файл, чтобы посмотреть ссылку ] и задание его свойства Interval.
System.Windows.Forms.Timer timer1 = new System.Windows.Forms.Timer();
timer1.Interval = 1000;

Закрепление элементов управления в формах Windows Forms
Можно закрепить элементы управления на границах формы или заполнить ими контейнер элемента управления (форму или контейнерный элемент управления). Например, проводник Windows закрепляет элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] у левой стороны окна, а элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] – у правой стороны. Свойство [ Cкачайте файл, чтобы посмотреть ссылку ] используется для всех видимых элементов управления Windows Forms для определения режима закрепления.
Свойство [ Cкачайте файл, чтобы посмотреть ссылку ] взаимодействует со свойством [ Cкачайте файл, чтобы посмотреть ссылку ].
Чтобы закрепить элемент управления
Выберите элемент управления, который следует закрепить.
В окне "Свойства" щелкните стрелку справа от свойства [ Cкачайте файл, чтобы посмотреть ссылку ].
В результате отображается редактор, показывающий набор полей, соответствующих краям и центру формы:

Нажмите кнопку, соответствующую краю формы, где следует закрепить элемент управления. Чтобы заполнить содержимое формы элемента управления или контейнерного элемента управления, щелкните центральное поле. Щелкните (none) для запрещения закрепления.

Выравнивание нескольких элементов управления в формах Windows Forms
Чтобы стандартизировать макет пользовательского интерфейса в приложении на базе Windows, можно с помощью одной команды задать расположение групп элементов управления.
Чтобы выровнять несколько элементов управления в форме
Откройте форму, элементы управления в которой требуется разместить в Конструкторе Windows Forms.
Выберите элементы управления, которые требуется расположить так, чтобы первый выбранный элемент управления был основным элементом, по которому следует выровнять остальные элементы.
В меню Формат наведите курсор мыши на команду Выровнять, а затем выберите одну из шести доступных команд.

Обработка события клавиши на элементе управления
Часто пользователь при работе использует не только мышь, но и клавиатуру. Например, двойной щелчок мыши может быть заменен нажатием клавиши Enter, а щелчок по кнопке Отмена равносилен нажатию клавиши Escape.
Чтобы при нажатии клавиши для определенного элемента управления срабатывала некоторая функция необходимо выполнить следующие действия:
В окне Свойства для обрабатываемого компонента перейдите в режим События.
Двойным щелчком по событию KeyDown создайте шаблон функции.
В теле созданной функции пропишите код обработки нажатия клавиш. В Visual C# предусмотрен ряд констант, закрепленных за клавишами и хранимыми в массиве Keys. Значение клавиши передается в функцию с помощью формальной переменной e. Получить подсказку по массиву Кеуs можно с помощью встроенного подсказчика, вызываемого нажатием клавиш Ctrl+Пробел:

Обработка нажатия клавиши происходит по схеме:
if (e.KeyCode==Keys.Имя_константы)
{
команды, выполняемые при нажатии клавиши, соответствующей
прописанной в условии константе
}
Пример. При нажатии на кнопке клавиши Enter на форме должна появляться надпись Enter, а кнопка должна становиться неактивной.
private void Button1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
Button1.enabled=false;
Label1.text=”Enter”;
}
}

Обращение к элементу управления на другой форме
Пусть имеется две формы. На form1 находится элемент управления label1 со значением «Отключено». На form2 находится кнопка button1, при нажатии на которую должно меняться значение надписи на form1 на значение «Включено».
Чтобы обратиться к элементу управления, находящемуся на другой форме, необходимо выполнить следующие действия:
На форме с элементом управления, к которому будет производиться обращение, объявить элемент управления глобальным. В нашем примере на form1 следует прописать:
public class Tb
{
public static TextBox tx = new TextBox();
}
На форме с элементом управления, к которому будет производиться обращение, пропишите команду инициализации элемента управления. Например:
Tb.tx = textBox1;
На форме с вызовом элемента управления пропишите необходимые команды по обращению к этому элементу. Например:
Tb.tx.Text = "34";

Привязка элементов управления в формах Windows Forms
При разработке формы, размер которой может быть изменен пользователем во время выполнения, элементы управления в этой форме должны соответственно изменять свой размер и местоположение. Чтобы динамически изменить размер элементов управления в форме, можно использовать свойство [ Cкачайте файл, чтобы посмотреть ссылку ] элементов управления Windows Forms. Свойство [ Cкачайте файл, чтобы посмотреть ссылку ] определяет положение прикрепления для элемента управления. В случае, когда элемент управления прикреплен к форме, а форма изменяет свой размер, элемент управления сохраняет промежуток между элементом управления и положениями прикрепления. Например, если элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] прикреплен к левому, правому и нижнему краям формы, при изменении размера формы элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] изменяет свой горизонтальный размер таким образом, чтобы сохранить одинаковое расстояние до правой и левой сторон формы. Кроме того, элемент управления располагается вертикально таким образом, что расстояние от него до нижнего края формы всегда одинаково. Если элемент управления не прикреплен и форма изменяет свой размер, положение элемента управления относительно краев формы меняется.
Свойство [ Cкачайте файл, чтобы посмотреть ссылку ] взаимодействует со свойством [ Cкачайте файл, чтобы посмотреть ссылку ].
Чтобы прикрепить элемент управления в форме, выполните следующие действия.
Выберите элемент управления, который необходимо прикрепить.
Примечание. Можно прикрепить несколько элементов управления одновременно. Для этого нужно нажать клавишу CTRL, и, удерживая ее, щелкнуть мышью каждый элемент управления, а затем проделать остальную часть этой процедуры.
В окне Свойства щелкните стрелку справа от свойства [ Cкачайте файл, чтобы посмотреть ссылку ]. В появившемся редакторе будет показан крестик.

Для прикрепления щелкните верхнюю, левую, правую или нижнюю часть крестика. По умолчанию элементы управления прикрепляются слева и сверху.
Чтобы отменить прикрепление с какой-либо стороны, щелкните соответствующую часть крестика.
Еще раз щелкните имя свойства [ Cкачайте файл, чтобы посмотреть ссылку ], чтобы закрыть редактор свойства [ Cкачайте файл, чтобы посмотреть ссылку ].
При отображении формы во время выполнения элемент управления изменяет свой размер, оставаясь на одинаковом расстоянии от края формы. Расстояние от прикрепленного края всегда остается равным расстоянию, определенному при расположении элемента управления в конструкторе Windows Forms.
Элементы управления
Button – кнопка)
Чаще всего элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] (кнопка) в Windows Forms используется для выполнения какой-либо программы при нажатии кнопки.

Чтобы создать на форме элемент управления Кнопка (button) необходимо в Панели элементов выбрать элемент button и перенести его на форму.
Если дважды щелкнуть элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] в работающем приложении, то каждый щелчок будет обрабатываться отдельно; другими словами, этот элемент управления не поддерживает событие двойного щелчка.
Назначение Элемента управления Button кнопкой Принять
В любой форме Windows Forms можно назначить элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] кнопкой "Принять", называемой также кнопкой по умолчанию. Кнопка по умолчанию нажимается при любом нажатии клавиши ВВОД независимо от того, на каком элементе управления формы в этот момент находится фокус.
Внимание. Исключение составляют случаи, когда элемент управления, на котором находится фокус, является другой кнопкой (в этом случае нажимается кнопка, на которой находится фокус), многострочным текстовым полем или настраиваемым элементом управления, перехватывающими клавишу ВВОД.
Чтобы назначить Элемента управления Button кнопкой "Принять":
Выберите форму, в которой находится кнопка.
В окне Свойства задайте в качестве свойства формы [ Cкачайте файл, чтобы посмотреть ссылку ] имя элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ].

Создание кнопки отмены в формах Windows Forms с помощью конструктора
В любой форме Windows Forms элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] можно назначить кнопкой "Отмена". Кнопка "Отмена" активируется при любом нажатии клавиши ESC, независимо от того, на каком элементе управления формы находится в этот момент фокус. Такая кнопка обычно создается, чтобы позволить пользователю быстро прервать операцию, не выполняя никакого действия.
Чтобы назначить кнопку "Отмена"
Выделите форму, в которой находится кнопка.
В окне Свойства установите значение свойства формы [ Cкачайте файл, чтобы посмотреть ссылку ] равным имени элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ].

Надпись – Label
Элементы управления [ Cкачайте файл, чтобы посмотреть ссылку ] (Windows Forms) предназначены для отображения текста или изображений, которые пользователь не может изменить с клавиатуры. Они используются для идентификации объектов на форме, например, для описания того, что произойдет с элементом управления после выполнения на нем щелчка мышью, или для отображения сведений в ответ на процесс или событие во время выполнения приложения. Например, имеется возможность использовать надписи для добавления описательных заголовков в текстовые поля, списки, поля со списком и т.д. Кроме того, возможно написание кода, который изменяет текст, отображаемый в надписи, в ответ на события во время выполнения. Например, если приложению требуется несколько минут на обработку изменения, можно отобразить в надписи сообщение о статусе обработки.
Так как элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] не может получать фокус, он может также использоваться для создания клавиш доступа для других элементов управления. Клавиша доступа позволяет пользователю выбрать другой элемент управления, используя сочетание клавиши ALT и заданной клавиши.
Отображаемый в надписи текст содержится в свойстве [ Cкачайте файл, чтобы посмотреть ссылку ]. Свойство [ Cкачайте файл, чтобы посмотреть ссылку ] позволяет задать выравнивание текста в надписи.
Приведение размера элемента управления Label в соответствие с его содержимым
Отображаемый элементом управления форм Windows [ Cкачайте файл, чтобы посмотреть ссылку ] текст надписи может состоять из одной или нескольких строк.

Имеется возможность использовать фиксированную длину текста или же автоматически изменять размер надписи в соответствии с длиной текста. Свойство [ Cкачайте файл, чтобы посмотреть ссылку ] позволяет автоматически изменять размер элементов управления в соответствии с размером надписи; это свойство очень полезно в случае изменения надписи во время выполнения.
Чтобы размер элемента управления надписи динамически изменялся в соответствии с его содержимым, установите для свойства [ Cкачайте файл, чтобы посмотреть ссылку ] значение true.
Если для свойства [ Cкачайте файл, чтобы посмотреть ссылку ] установлено значение false, то слова, указанные в свойстве [ Cкачайте файл, чтобы посмотреть ссылку ] и не помещающиеся на одну строку, будут перемещаться, если это возможно, на другую строку, однако размер элемента управления увеличиваться не будет.

Поле ввода TextBox
Текстовые поля форм Windows Forms используются для приема данных, вводимых пользователем, или для отображения текста.

Элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] обычно используется для редактируемого текста, хотя его можно также сделать доступным только для чтения. В текстовых полях можно выводить несколько строк текста, размещать текст в соответствии с размером элемента управления и применять основные элементы форматирования. В элементе управления [ Cкачайте файл, чтобы посмотреть ссылку ] можно вводить или отображать текст только в одном формате. Для отображения текста в различных форматах следует использовать элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ].
Текст, отображаемый в элементе управления, содержится в свойстве [ Cкачайте файл, чтобы посмотреть ссылку ]. По умолчанию в текстовом поле можно ввести до 2048 знаков. Если свойству [ Cкачайте файл, чтобы посмотреть ссылку ] присвоить значение true, это позволит вводить до 32 килобайт текста. Свойство [ Cкачайте файл, чтобы посмотреть ссылку ] может быть установлено в окне Свойства во время разработки, программными средствами во время выполнения или в результате ввода данных пользователем во время выполнения. Текущее содержимое текстового поля может быть получено во время выполнения путем считывания значения свойства [ Cкачайте файл, чтобы посмотреть ссылку ].
Пример. Код программы, в результате выполнения которого, текст помещается в элемент управления во время выполнения приложения при нажатии кнопки Button10.
private void button10_Click(object sender, EventArgs e)
{
textBox1.Text = "Вами была нажата кнопка Button10";
}
Добавление кавычек в строку
Иногда в строку текста необходимо вставить кавычки (" "). Пример:
Она сказала: "Ты этого заслуживаешь!"
В качестве альтернативы можно использовать поле [ Cкачайте файл, чтобы посмотреть ссылку ] в качестве константы.
Чтобы вставить кавычки в строку кода
Добавьте в текст escape-последовательность \".\". Например, для получения вышеуказанной строки используйте следующий код.
textBox1.Text = " Она сказала: \" Ты этого заслуживаешь! \" ";
либо
Вставьте знак Юникода (\u0022), соответствующий кавычкам.
textBox1.Text = " Она сказала: " + '\u0022' + " Ты этого заслуживаешь! " + '\u0022';
либо
Можно определить константу для требуемого знака и использовать ее там, где необходимо.
const string quote = "\"";
textBox1.Text = " Она сказала: " + quote + " Ты этого заслуживаешь! "+ quote ;

Изменение положения курсора в текстовом поле
Когда элемент управления Windows Forms [ Cкачайте файл, чтобы посмотреть ссылку ] впервые получает фокус, по умолчанию курсор устанавливается слева от текста, если он содержится в текстовом поле. Пользователь может изменять положение курсора с помощью клавиатуры или мыши. Если элемент управления теряет фокус и затем получает его снова, курсор будет установлен в том положении, куда пользователь последний раз поместил его.
Такой режим не всегда удобен для пользователя. Например, в текстовом редакторе пользователь может ожидать появления новых знаков после имеющегося текста. В приложении ввода данных может ожидаться замена существующих записей новыми знаками. Свойства [ Cкачайте файл, чтобы посмотреть ссылку ] и [ Cкачайте файл, чтобы посмотреть ссылку ] позволяют изменять положение курсора в соответствии с конкретными требованиями.

Чтобы управлять положением курсора в элементе управления TextBox:
Присвойте начальное значение свойству [ Cкачайте файл, чтобы посмотреть ссылку ]. Нуль означает, что курсор помещается слева от первого знака.
Присвойте свойству [ Cкачайте файл, чтобы посмотреть ссылку ] значение, равное длине текста, который требуется выделить (необязательное действие).
Курсор [ Cкачайте файл, чтобы посмотреть ссылку ] является по умолчанию видимым в новой форме, если элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] является первым в порядке табуляции. В противном случае курсор будет отображаться только если передать элементу [ Cкачайте файл, чтобы посмотреть ссылку ] фокус с помощью мыши или клавиатуры.

Чтобы сделать курсор видимым по умолчанию в новой форме присвойте свойству [ Cкачайте файл, чтобы посмотреть ссылку ] элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ] значение 0.

Выделение текста в элементе управления TextBox
В элементе управления Windows Forms [ Cкачайте файл, чтобы посмотреть ссылку ] можно выделять текст программным способом. Например, если создается функция, просматривающая текст в поисках определенной строки, то можно выделять текст для визуального уведомления о местоположении найденной строки.

Чтобы выделить текст программными средствами:
Присвойте свойству [ Cкачайте файл, чтобы посмотреть ссылку ] значение, соответствующее начальной позиции текста, который требуется выделить.
Значением свойства [ Cкачайте файл, чтобы посмотреть ссылку ] является число, определяющее положение курсора в текстовой строке, причем 0 указывает крайнюю левую позицию. Если значение свойства [ Cкачайте файл, чтобы посмотреть ссылку ] больше или равно числу знаков в текстовом поле, то курсор помещается за последним знаком.
Присвойте свойству [ Cкачайте файл, чтобы посмотреть ссылку ] значение, равное длине текста, который требуется выделить.
Значением свойства [ Cкачайте файл, чтобы посмотреть ссылку ] является число, определяющее количество выделяемых знаков. Если значение [ Cкачайте файл, чтобы посмотреть ссылку ] больше нуля, то выделяется указанное количество знаков, начиная с текущей позиции курсора.
Воспользуйтесь свойством [ Cкачайте файл, чтобы посмотреть ссылку ] для доступа к выделенному тексту.
Пример. Выделение содержимого текстового поля.
private void button10_Click(object sender, EventArgs e)
{
textBox1.SelectionStart = 0;
textBox1.SelectionLength = textBox1.Text.Length;
}
Пример. Перевод фокуса на текстовое поле, запись в него текста и выделение текста полностью.
private void button10_Click(object sender, EventArgs e)
{
textBox1.Text = "Вами была нажата кнопка Button10";
textBox1.Focus();
textBox1.SelectAll();
}
Очистка текстового поля
Чтобы очистить текстовое поле присвойте свойству Text элемента управления TextBox в качестве значения пустую строку, например:
textBox1.Text = "";
Многострочные элементы управления TextBox в Windows Forms
По умолчанию в элементе управления Windows Forms [ Cкачайте файл, чтобы посмотреть ссылку ] отображается одна строка текста без полос прокрутки. Если длина текста превышает размер доступного пространства, отображается лишь часть текста. Эту стандартную настройку можно изменить, присваивая соответствующие значения свойствам [ Cкачайте файл, чтобы посмотреть ссылку ] (многострочное текстовое поле), [ Cкачайте файл, чтобы посмотреть ссылку ] (переход на новую строку при достижении границы текстового поля) и [ Cкачайте файл, чтобы посмотреть ссылку ] (наличие полос прокрутки). Свойство [ Cкачайте файл, чтобы посмотреть ссылку ] можно изменить в редакторе элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ]. Открыть редактор можно щелкнув по символу треугольника в верхнем правом углу элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ].
13 SHAPE \* MERGEFORMAT 1415

Просмотр нескольких строк в элементе управления TextBox
Установите для свойства [ Cкачайте файл, чтобы посмотреть ссылку ] значение true. Если свойство [ Cкачайте файл, чтобы посмотреть ссылку ] имеет значение true (принимается по умолчанию), то текст в элементе управления будет отображаться в виде одного или нескольких абзацев; в противном случае он отображается в виде списка строк, причем некоторые строки могут быть обрезаны по краю элемента управления.
Присвойте соответствующее значение свойству [ Cкачайте файл, чтобы посмотреть ссылку ] (наличие полос прокрутки).
Присвойте соответствующее значение свойству [ Cкачайте файл, чтобы посмотреть ссылку ] (способ переноса текста)
Значение
Описание

false
Текст в элементе управления не переносится автоматически; он прокручивается вправо, пока не будет достигнут конец строки. Это значение используется, если было выбрано отображение с горизонтальной полосой прокрутки ([ Cкачайте файл, чтобы посмотреть ссылку ]) или с обеими полосами ([ Cкачайте файл, чтобы посмотреть ссылку ]).

true (по умолчанию)
Горизонтальная полоса прокрутки не отображается. Это значение используется, если для отображения одного или нескольких абзацев был выбран режим с вертикальными полосами прокрутки ([ Cкачайте файл, чтобы посмотреть ссылку ]) или без полос прокрутки ([ Cкачайте файл, чтобы посмотреть ссылку ]).


Создание текстового поля, доступного только для чтения
Редактируемое текстовое поле Windows Forms можно сделать доступным только для чтения. Например, в текстовом поле могут отображаться данные, которые обычно допускают редактирование, но при определенном состоянии приложения оказываются недоступными для изменения.
Чтобы сделать текстовое поле доступным только для чтения необходимо присвоить свойству ReadOnly элемента управления TextBox значение true. Если это свойство имеет значение true, то пользователи могут прокручивать и выделять текст, но не изменять его. Команда Копировать в текстовом поле действует, а команды Вырезать и Вставить нет. Изменить значение свойства ReadOnly можно как в конструкторе в окне Свойства, так и прописав в коде команду:
textBox1.ReadOnly = true;
Примечание. Свойство [ Cкачайте файл, чтобы посмотреть ссылку ] влияет только на взаимодействие с пользователем во время выполнения. Содержимое текстового поля может быть изменено программными средствами во время выполнения; для этого достаточно изменить значение свойства [ Cкачайте файл, чтобы посмотреть ссылку ] текстового поля.

Создание текстового поля для ввода пароля с помощью элемента управления TextBox
Поле пароля это текстовое поле Windows Forms, в котором вместо вводимой пользователем строки текста отображаются знаки-заполнители.
Чтобы создать текстовое поле пароля
Установите для свойства [ Cкачайте файл, чтобы посмотреть ссылку ] элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ] определенный знак.
Свойство [ Cкачайте файл, чтобы посмотреть ссылку ] определяет знак, используемый в текстовом поле. Например, чтобы в поле пароля отображались звездочки, следует задать знак * в качестве значения свойства [ Cкачайте файл, чтобы посмотреть ссылку ] в окне Свойства. После этого, какие бы знаки пользователь ни вводил в текстовом поле, вместо них будут отображаться звездочки.
(Не обязательно) Установите свойство [ Cкачайте файл, чтобы посмотреть ссылку ]. Это свойство определяет, сколько знаков может быть введено в текстовом поле. При превышении максимального количества раздается звуковой сигнал и ввод других знаков в текстовое поле становится невозможным.

Определение кода введенного символа
Для определения кода символа, стоящего в позиции i в строке s следует воспользоваться командой:
double x = Char.ConvertToUtf32(s,i);
где: string s – исходная строка; int i – номер позиции символа в строке s.

Печать символа по его коду
Для печати символа по его коду в кодировке Utf-32 следует воспользоваться командой:
string c = Char.ConvertFromUtf32(i);
где: string c – печатаемый символ; int i – код символа в системе Utf-32.

Добавление строки в текстовое поле
Чтобы добавить строку в многострочное текстовое поле TextBox необходимо в обработчике соответствующего события прописать код, выполняющий:
создание копии массива строк из многострочного текстового поля TextBox;
вставку в копию массива новой строки;
замену массива Lines текстового поля TextBox на видоизмененную копию.
Пример. На рисунке ниже показано начальное состояние элементов управления. Из поля TextBox1 по кнопке Добавить текст добавляется в многострочное поле TextBox2 в строку с номером выбранным в элементе управления СomboBox1. После добавления строки в элементе управления СomboBox1 добавляется в конец списка новый элемент, соответствующий числу строк в поле TextBox2. В исходном состоянии в элементе управления СomboBox1 четыре элемента (1,2,3,4). После добавления строки их становится пять (1,2,3,4,5) и т.д.

13 SHAPE \* MERGEFORMAT 1415
Для реализации этой задачи в обработчике события нажатия кнопки Добавить необходимо прописать код:
private void button1_Click(object sender, EventArgs e)
{ string[] s = new String[2];
// Добавляем символы перехода на новую строку
string c1 = Char.ConvertFromUtf32(13);
string c2 = Char.ConvertFromUtf32(10);
// Создаем копию массива Lines поля textBox2
s = textBox2.Lines;
// Переводим строковое значение элемента ComboBox1 в целое
int n = Convert.ToInt16(comboBox1.Text);
// Вставляем строку в многострочное текстовое поле
s[n-1]=s[n-1].Insert(0,textBox1.Text+c1+c2);
// Записываем измененную копию обратно в поле
textBox2.Lines = s;
// Добавляем номер в список строк
comboBox1.Items.Add(textBox3.Lines.Count());
}
Чтение одной выбранной строки в текстовом поле
Чтобы считать строку с номером n из многострочного текстового поля TextBox необходимо в обработчике соответствующего события прописать код:
s= textBox1.Lines[n];
где: string s – переменная, в которую будет записана строка с номером n; int n – номер строки в многострочном текстовом поле TextBox.
Пример. Записать в элемент управления Надпись (Label1) строку из многострочного текстового поля TextBox1. Номер строке выбирается в элементе управления СomboBox1. Нумерация выбираемых строк в СomboBox1 должна начинаться с 1. Т.к. ни одна строка в начале работы программы еще не выбрана, то в элементе управления СomboBox1 отображается значение -1.
13 SHAPE \* MERGEFORMAT 1415
Код, прописанный в функции обработки события выбора номера строки в элементе управления СomboBox1:
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{ int n;
n = Convert.ToInt16(comboBox1.Text);
label1.Font = new Font("Microsoft Sans Serif", 8, FontStyle.Regular);
label1.Text = textBox1.Lines[n-1];
}

Панель Panel
Элементы управления Windows Forms [ Cкачайте файл, чтобы посмотреть ссылку ] предназначены для объединения в идентифицируемые группы других элементов управления.

Обычно панели используются для разделения формы по функциям. Объединение всех параметров в группу в панели предоставляет пользователю логическую визуальную подсказку. В режиме разработки все элементы управления можно легко переместить при перемещении одного элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ] перемещаются также все входящие в него элементы управления. Доступ к объединенным в панели элементам управления можно получить с помощью ее свойства [ Cкачайте файл, чтобы посмотреть ссылку ].
Элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] имеет некоторое сходство с элементом управления [ Cкачайте файл, чтобы посмотреть ссылку ], однако только у элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ] могут быть полосы прокрутки, и только элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] отображает заголовок.

Настройка панели
В настройку панели относятся функции настраивания следующих элементов:
Полосы прокрутки.
Чтобы отобразить полосы прокрутки нужно установить для свойства [ Cкачайте файл, чтобы посмотреть ссылку ] значение true.
Цвет и стиль границ.
Настроить внешний вид панели можно, задав значения для свойств [ Cкачайте файл, чтобы посмотреть ссылку ] (цвет фона), [ Cкачайте файл, чтобы посмотреть ссылку ] (рисунок на панели) и [ Cкачайте файл, чтобы посмотреть ссылку ] (стиль границ). Свойство [ Cкачайте файл, чтобы посмотреть ссылку ] определяет, выделяется ли панель обычной линией ([ Cкачайте файл, чтобы посмотреть ссылку ]), затененной линией ([ Cкачайте файл, чтобы посмотреть ссылку ]) или границы отсутствуют ([ Cкачайте файл, чтобы посмотреть ссылку ]).

Установка фона панели Windows Forms
Элемент управления Windows Forms [ Cкачайте файл, чтобы посмотреть ссылку ] может отображать как цвет фона, так и фоновое изображение. Свойство [ Cкачайте файл, чтобы посмотреть ссылку ] задает цвет фона для представленных в панели элементов управления, таких как метки и переключатели. Если свойство [ Cкачайте файл, чтобы посмотреть ссылку ] не задано, выбранный цвет в свойстве [ Cкачайте файл, чтобы посмотреть ссылку ] заполняет панель полностью. Если свойство [ Cкачайте файл, чтобы посмотреть ссылку ] задано, за присутствующими в панели элементами управления будет отображено указанное изображение.
Чтобы задать фон программными средствами
Задайте для свойства панели [ Cкачайте файл, чтобы посмотреть ссылку ] значение типа [ Cкачайте файл, чтобы посмотреть ссылку ], например:
panel1.BackColor = Color.AliceBlue;
Задайте свойство панели [ Cкачайте файл, чтобы посмотреть ссылку ], используя метод [ Cкачайте файл, чтобы посмотреть ссылку ] класса [ Cкачайте файл, чтобы посмотреть ссылку ], например:
panel1.BackgroundImage = Image.FromFile(@"D:\p1002.bmp");

Таймер Timer
С помощью компонента Timer в Windows Forms производится выполнение операций с заданной периодичностью.

Иногда бывает необходимо создать процедуру, которая выполняется через определенные интервалы времени до окончания цикла или запускается по истечении установленного интервала. Создание такой процедуры возможно благодаря компоненту [ Cкачайте файл, чтобы посмотреть ссылку ].
Компонент Windows Forms [ Cкачайте файл, чтобы посмотреть ссылку ] вызывает событие [ Cкачайте файл, чтобы посмотреть ссылку ] через определенные интервалы времени.
Внимание. Этот компонент предназначен для среды Windows Forms и не подходит для серверной среды.
Длина интервалов определяется свойством [ Cкачайте файл, чтобы посмотреть ссылку ], значение которого исчисляется в миллисекундах. Когда компонент включен, событие [ Cкачайте файл, чтобы посмотреть ссылку ] вызывается через каждый интервал.
Ключевыми методами компонента [ Cкачайте файл, чтобы посмотреть ссылку ] являются [ Cкачайте файл, чтобы посмотреть ссылку ] и [ Cкачайте файл, чтобы посмотреть ссылку ], которые включают и выключают таймер. При выключении таймера его параметры сбрасываются; приостановить компонент [ Cкачайте файл, чтобы посмотреть ссылку ] нельзя.
Чтобы выполнять процедуру через заданные интервалы времени с помощью компонента Timer, выполните следующие действия:
Добавьте элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] в форму. В приведенном ниже примере показано, как сделать это программным путем.
Задайте значение свойства [ Cкачайте файл, чтобы посмотреть ссылку ] (в миллисекундах) для таймера. Это свойство определяет, сколько времени пройдет до момента повторного выполнения процедуры.
Напишите соответствующий код в обработчике событий [ Cкачайте файл, чтобы посмотреть ссылку ]. Код этого обработчика будет выполняться с интервалом, указанным в свойстве [ Cкачайте файл, чтобы посмотреть ссылку ].
Чтобы запустить таймер, установите для свойства [ Cкачайте файл, чтобы посмотреть ссылку ] значение true. Начнется генерация события [ Cкачайте файл, чтобы посмотреть ссылку ], запускающего процедуру с заданным интервалом.
Чтобы отменить повторный запуск процедуры, в нужный момент присвойте свойству [ Cкачайте файл, чтобы посмотреть ссылку ] значение false. Задание интервала 0 не приведет к остановке таймера.
Пример.
В этом примере выполняется добавление компонента [ Cкачайте файл, чтобы посмотреть ссылку ] во время выполнения.
[ Cкачайте файл, чтобы посмотреть картинку ] System.Windows.Forms.Timer timer1 = new System.Windows.Forms.Timer();
timer1.Interval = 1000;

Ограничения свойства Interval компонента Timer в Windows Forms
Компонент Windows Forms [ Cкачайте файл, чтобы посмотреть ссылку ] имеет свойство [ Cкачайте файл, чтобы посмотреть ссылку ], указывающее время в миллисекундах, которое проходит между двумя следующими друг за другом событиями таймера. Если компонент не отключен, таймер получает событие [ Cкачайте файл, чтобы посмотреть ссылку ] через приблизительно равные интервалы времени.
Свойство [ Cкачайте файл, чтобы посмотреть ссылку ] имеет несколько ограничений, которые необходимо учитывать при программировании компонента [ Cкачайте файл, чтобы посмотреть ссылку ].
Если какое-либо приложение интенсивно потребляет системные ресурсы (например, использует длинные циклы, выполняет большие объемы вычислений или производит доступ к диску, сети или порту), события таймера могут поступать не так часто, как указывается свойством [ Cкачайте файл, чтобы посмотреть ссылку ].
Нет гарантии, что интервал истечет точно вовремя. Чтобы обеспечить точность, таймер должен сверяться по мере необходимости с системными часами, а не пытаться отслеживать прошедшее время внутренними средствами.
Точность свойства [ Cкачайте файл, чтобы посмотреть ссылку ] измеряется миллисекундами. Некоторые компьютеры имеют счетчики высокого разрешения, обеспечивающие более высокую точность. Доступность такого счетчика определяется характеристиками компьютерного процессора.

Переключатель CheckBox
Элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] (Windows Forms) указывает, включено или отключено какое-либо конкретное условие.

Обычно переключатель используется для представления пользователю выбора типа "Да/Нет" или "Истина/Ложь". Когда флажок установлен, он отображается в элементе управления. Элементы управления типа "флажок" можно объединять в группы для предоставления пользователю нескольких вариантов выбора. В такой группе пользователь может установить один или несколько флажков.
Элементы управления "флажок" и "переключатель" сходны в том, что каждый используется для указания варианта, выбранного пользователем. Их отличие заключается в том, что в группе переключателей можно выбрать только один элемент. В группе флажков можно выбрать любое количество элементов.
Флажок можно подключить к элементам базы данных путем связывания данных. Несколько флажков объединяются в группу с помощью элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ]. Это средство используется для простоты представления в структуре интерфейса пользователя, поскольку в конструкторе форм сгруппированные элементы управления можно перемещать одновременно.
Элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] имеет два важных свойства: [ Cкачайте файл, чтобы посмотреть ссылку ] (текущее состояние: включен/выключен) и [ Cкачайте файл, чтобы посмотреть ссылку ] (текущее состояние: включен/выключен/неопределен). Свойство [ Cкачайте файл, чтобы посмотреть ссылку ] возвращает true или false. Свойство [ Cкачайте файл, чтобы посмотреть ссылку ] возвращает или значение [ Cкачайте файл, чтобы посмотреть ссылку ], или значение [ Cкачайте файл, чтобы посмотреть ссылку ]; если же для свойства [ Cкачайте файл, чтобы посмотреть ссылку ] установлено значение true, то свойство [ Cкачайте файл, чтобы посмотреть ссылку ] может возвращать значение [ Cкачайте файл, чтобы посмотреть ссылку ]. При неопределенном состоянии поле флажка отображается затененным, что означает недоступность параметра.
Эти два свойства работают синхронно, если для свойства [ Cкачайте файл, чтобы посмотреть ссылку ] установлено значение false.

Обработка события щелчка элемента управления CheckBox
Если щелкнуть элемент управления Windows Forms [ Cкачайте файл, чтобы посмотреть ссылку ], происходит событие CheckedChanged. В приложении можно задать выполнение определенного действия в зависимости от состояния флажка.
Чтобы ответить на щелчок элемента управления CheckBox в обработчике события CheckedChanged с помощью свойства [ Cкачайте файл, чтобы посмотреть ссылку ] определите состояние элемента управления и выполните необходимое действие.
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
if (checkBox1.Checked) {операции, выполняемые если флажок включен};
else {операции, выполняемые если флажок выключен};
}
Примечание. Если дважды щелкнуть элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ], каждый щелчок будет обрабатываться отдельно.
Примечание. Если для свойства [ Cкачайте файл, чтобы посмотреть ссылку ] задано значение true (значение по умолчанию), элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] автоматически меняет состояние при щелчке. В противном случае необходимо вручную задать свойство [ Cкачайте файл, чтобы посмотреть ссылку ] при возникновении события [ Cкачайте файл, чтобы посмотреть ссылку ].
Чтобы ответить на щелчок элемента управления CheckBox в обработчике события CheckedChanged с помощью свойства CheckState определите состояние элемента управления и выполните необходимое действие.
private void checkBox1_ CheckedChanged (object sender, System.EventArgs e)
{ switch(checkBox1.CheckState)
{
case CheckState.Checked:
{ операции, выполняемые если флажок включен;.
break;};
case CheckState.Unchecked:
{ операции, выполняемые если флажок выключен;.
break;};
case CheckState.Indeterminate:
{ операции, выполняемые если флажок отключен;.
break;}
}
}
Примечание. Если свойство [ Cкачайте файл, чтобы посмотреть ссылку ] имеет значение true, свойство [ Cкачайте файл, чтобы посмотреть ссылку ] возвращает true как для включенного состояния (значение [ Cкачайте файл, чтобы посмотреть ссылку ] у свойства [ Cкачайте файл, чтобы посмотреть ссылку ]), так и для неопределенного (значение [ Cкачайте файл, чтобы посмотреть ссылку ] у свойства [ Cкачайте файл, чтобы посмотреть ссылку ]).

Настройка параметров других элементов управления или приложения с помощью элемента управления CheckBox
Задайте начальное значение свойства [ Cкачайте файл, чтобы посмотреть ссылку ] и параметры в случае, когда флажок будет соответствовать положениям «включен» и «выключен».
При изменении положения флажка в работающем приложении срабатывает событие [ Cкачайте файл, чтобы посмотреть ссылку ].
В приведенном ниже примере кода при вызове события [ Cкачайте файл, чтобы посмотреть ссылку ] элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ] для свойства кнопки Visible (видимость) задается значение true, если флажок установлен и false в противном случае.
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{ if (checkBox1.Checked) button11.Visible = true;
else button11.Visible = false;
}

Переключатель RadioButton
Элемент управления Windows Forms [ Cкачайте файл, чтобы посмотреть ссылку ] (переключатель, радиокнопка) обеспечивает выбор варианта из двух или более взаимоисключающих вариантов.

Функции переключателей и флажков могут показаться схожими, но между ними есть важное отличие: в случае переключателя пользователь может выбрать лишь один вариант. При выборе другого переключателя, предыдущий переключатель сбрасывается. Напротив, флажков можно выбрать любое количество. Определяя группу значений переключателя, разработчик формы предлагает пользователю набор вариантов, из которых может быть задан один и только один.
Радиокнопки объединяются в группы. На одной форме может быть несколько групп. Для первой кнопки каждой группы в ресурсном редакторе нужно установить при этом опцию Group, а для других кнопок группы она должна быть сброшена. Кнопки нумеруются в порядке значений их идентификаторов (то есть в порядке их создания в ресурсном редакторе). Если в диалоге все радиокнопки образуют одну группу, то опцию Group можно не устанавливать.
Радиокнопки управляются с помощью класса Button. Состояние радиокнопок можно изменять с помощью функции SetCheck() и читать с помощью функции GetCheck().
Хотя из программы можно установить сразу несколько радиокнопок или сбросить все, нормальный стиль программирования под Windows предполагает, что всегда будет установлена одна и только одна радиокнопка.
При щелчке элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ], его свойству [ Cкачайте файл, чтобы посмотреть ссылку ] задается значение true и вызывается обработчик событий [ Cкачайте файл, чтобы посмотреть ссылку ]. При изменении значения свойства [ Cкачайте файл, чтобы посмотреть ссылку ] происходит событие [ Cкачайте файл, чтобы посмотреть ссылку ]. Если свойство [ Cкачайте файл, чтобы посмотреть ссылку ] имеет значение true (принимается по умолчанию), то при выборе одного значения переключателя остальные значения группы автоматически сбрасываются. Значение false этому свойству присваивают только в тех случаях, когда в коде предусмотрена проверка допустимости выбранного варианта переключателя. Текст, связанный с этим элементом управления, задается свойством [ Cкачайте файл, чтобы посмотреть ссылку ], которое также может определять клавиши быстрого доступа.
Элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] может выглядеть как кнопка команды, которая отображается как нажатая при выбранном значении переключателя, если свойство [ Cкачайте файл, чтобы посмотреть ссылку ] имеет значение [ Cкачайте файл, чтобы посмотреть ссылку ].

Примечание. Если радиокнопка одна, то событие [ Cкачайте файл, чтобы посмотреть ссылку ] не срабатывает. Переключать такую кнопку можно только вручную непосредственно с помощью кода в событии [ Cкачайте файл, чтобы посмотреть ссылку ]:
private void radioButton2_Click(object sender, EventArgs e)
{ if (radioButton2.Checked==false)
{ Действия, выполняемые при включении радиокнопки;
}
else
{ Действия, выполняемые при выключении радиокнопки;
}
}
Пример. При включении радиокнопки поясняющая ее надпись становится красного цвета, при выключении – синего.
private void radioButton2_Click(object sender, EventArgs e)
{ if (radioButton2.Checked==false)
{ radioButton2.ForeColor = Color.Red;
radioButton2.Checked = true;
}
else
{ radioButton2.ForeColor = Color.Blue;
radioButton2.Checked = false;
}
}
Примечание. Если радиокнопка имеет формат Button, то свойство Checked становится недоступным для чтения, а событие [ Cкачайте файл, чтобы посмотреть ссылку ] не срабатывает. Переключать такую кнопку можно только вручную непосредственно с помощью кода в событии [ Cкачайте файл, чтобы посмотреть ссылку ]. В следующем примере при щелчке по радиокнопке меняется ее формат с Normal на Button и обратно. Начальное состояние включенная радиокнопка.
private void radioButton1_Click(object sender, EventArgs e)
{
if (radioButton1.Appeara
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
В переключателях можно также отображать рисунки с помощью свойств [ Cкачайте файл, чтобы посмотреть ссылку ] и [ Cкачайте файл, чтобы посмотреть ссылку ].

Создание переключателя для выбора одной из нескольких установок на базе элементов управления RadioButton
Элементы управления Windows Forms [ Cкачайте файл, чтобы посмотреть ссылку ] служат для выбора между двумя или несколькими параметрами, из которых только один может быть присвоен процедуре или объекту. Например, группа элементов управления [ Cкачайте файл, чтобы посмотреть ссылку ] может отображать выбор цвета объекта, и может быть использован только один цвет. Поэтому существует возможность выбора только одного элемента [ Cкачайте файл, чтобы посмотреть ссылку ], даже если он является частью функциональной группы.
Переключатели группируются путем их рисования внутри таких контейнеров, как элементы управления [ Cкачайте файл, чтобы посмотреть ссылку ], элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] или форма. Все переключатели, добавленные непосредственно в форму, находятся в одной группе. Для добавления отдельных групп следует разместить их внутри элементов управления или групп.
Чтобы сгруппировать элементы управления RadioButton как набор для функционирования независимо от других наборов, выполните следующие действия.
Перетащите элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] или [ Cкачайте файл, чтобы посмотреть ссылку ] из области элементов Windows Forms в форму.
Добавьте необходимое количество элементов управления [ Cкачайте файл, чтобы посмотреть ссылку ] в [ Cкачайте файл, чтобы посмотреть ссылку ] или [ Cкачайте файл, чтобы посмотреть ссылку ].
Создайте обработчик события переключения радиокнопки [ Cкачайте файл, чтобы посмотреть ссылку ]:
Пример: При выборе одной из двух радиокнопок меняется цвет текста на форме. Вторая радиокнопка автоматически отключается.

Код:
private void radioButton1_CheckedChanged(object sender, EventArgs e)
{ if (radioButton1.Checked) { glob.frm2.ForeColor = Color.Green; }
}
private void radioButton2_CheckedChanged(object sender, EventArgs e)
{ if (radioButton2.Checked) { glob.frm2.ForeColor = Color.Blue; }
}

Группа объектов GroupBox
Элементы управления Windows Forms [ Cкачайте файл, чтобы посмотреть ссылку ] предназначены для объединения в идентифицируемые группы других элементов управления.

Обычно для разделения формы по функциям используются группы. Например, это может быть область форматирования объекта. Объединение всех параметров в области группы обеспечивает пользователю логическую визуальную подсказку. Во время разработки все элементы управления легко можно переместить при перемещении одного элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ] перемещаются также все входящие в него элементы управления.
Заголовок области группы определяется свойством [ Cкачайте файл, чтобы посмотреть ссылку ].
Элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] имеет некоторое сходство с элементом управления [ Cкачайте файл, чтобы посмотреть ссылку ], однако только у элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ] могут быть полосы прокрутки, и только элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] отображает заголовок.

Списки ComboBox
Элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] (Windows Forms) используется для вывода данных в раскрывающемся поле со списком.

По умолчанию элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] отображается в виде двух частей: верхняя часть представляет собой текстовое поле, в которое пользователь может ввести элемент списка. Вторая часть представляет собой список элементов, один из которых пользователь может выбрать.
Свойство [ Cкачайте файл, чтобы посмотреть ссылку ] возвращает целочисленное значение, соответствующее выбранному элементу списка. Выбранный элемент можно изменить программными средствами, изменив в коде значение [ Cкачайте файл, чтобы посмотреть ссылку ]; соответствующий элемент списка появится в текстовом поле поля со списком. Если выбранных элементов нет, значение [ Cкачайте файл, чтобы посмотреть ссылку ] равно -1. Если в списке выбран первый элемент, значение [ Cкачайте файл, чтобы посмотреть ссылку ] равно 0. Свойство [ Cкачайте файл, чтобы посмотреть ссылку ] аналогично свойству [ Cкачайте файл, чтобы посмотреть ссылку ], но возвращает сам элемент, обычно в виде строкового значения. Свойство [ Cкачайте файл, чтобы посмотреть ссылку ] отражает число элементов в списке, а значение свойства [ Cкачайте файл, чтобы посмотреть ссылку ] всегда на единицу больше максимально возможного значения свойства [ Cкачайте файл, чтобы посмотреть ссылку ], поскольку для свойства [ Cкачайте файл, чтобы посмотреть ссылку ] индексация ведется от нуля.
Чтобы добавить или удалить элементы в элементе управления [ Cкачайте файл, чтобы посмотреть ссылку ], используйте метод [ Cкачайте файл, чтобы посмотреть ссылку ] (добавление элемента в конец списка), [ Cкачайте файл, чтобы посмотреть ссылку ] (вставка элемента в середину списка), [ Cкачайте файл, чтобы посмотреть ссылку ] (очистка списка) или [ Cкачайте файл, чтобы посмотреть ссылку ] (удаление элемента из списка). Кроме того, можно добавить элементы в список с помощью свойства [ Cкачайте файл, чтобы посмотреть ссылку ] во время разработки.
Примечание. Все выше перечисленные свойства и методы доступны только в коде. В окне Свойства они отсутствуют.
Создание списка
Чтобы создать список выполните следующие действия:
Добавьте на форму элемент ComboBox.
Добавьте в список элементы одним из следующих способов:
С помощью панели Задачи, которая открывается при щелчке по треугольнику в верхнем правом углу элемента управления ComboBox. В панели Задачи выберите команду Правка элементов.
13 SHAPE \* MERGEFORMAT 1415
С помощью щелчка по символу в свойстве Items элемента управления ComboBox.
В результате откроется окно Редактор коллекции строк для правки элементов списка.
Введите элементы списка по одному на строку.
Нажмите ОК.
Введите в качестве значения свойства Text название элемента, который должен быть виден в начальном состоянии списка в рабочем приложении. Например, пусть в данном примере это элемент: «Синий».
Создайте обработчик события выбора элемента списка SelectedIndexChanged в окне Свойства в режиме События.
Пример. При выборе цвета из списка должен меняться соответственно цвет текста на форме.
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)

·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Примечание. Схожим для ComboBox по свойствам элементом управления является список ListBox.
Элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] (Windows Forms) отображает список элементов, в котором пользователь может выбрать один или несколько элементов. Если не все элементы могут одновременно отобразиться в поле списка, к элементу управления [ Cкачайте файл, чтобы посмотреть ссылку ] автоматически добавляется полоса прокрутки. Если для свойства [ Cкачайте файл, чтобы посмотреть ссылку ] задано значение true, элементы списка отображаются в нескольких столбцах и появляется горизонтальная полоса прокрутки. Если для свойства [ Cкачайте файл, чтобы посмотреть ссылку ] задано значение false, элементы списка отображаются в одном столбце и появляется вертикальная полоса прокрутки. Если для [ Cкачайте файл, чтобы посмотреть ссылку ] задано значение true, полоса прокрутки появляется независимо от числа элементов. Свойство [ Cкачайте файл, чтобы посмотреть ссылку ] определяет, сколько элементов списка можно выбрать одновременно.
Примечание. Расширением элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ] является список CheckedListBox
Он выполняет практически все функции списка, а кроме того, в нем может отображаться галочка рядом с элементами списка. Другое различие между этими элементами управления заключается в том, что списки с помеченными элементами поддерживают только режим [ Cкачайте файл, чтобы посмотреть ссылку ], т.е. в таких списках можно выделить только один элемент или не выделить ни одного. Обратите внимание, что выделенный элемент отмечается в форме с помощью цвета и не обязательно является помеченным элементом.
Списки с помеченными элементами могут содержать элементы, добавленные во время выполнения в окне редактора набора строк; элементы списка можно также добавлять из коллекции динамически во время выполнения с помощью свойства [ Cкачайте файл, чтобы посмотреть ссылку ].

Рисунки PictureBox
Элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] (Windows Forms) предназначен для отображения графических объектов в различных форматах. Это может быть растровое изображение (файл BMP), пиктограмма (файл ICO), метафайл (файл WMF или EMF), а также файлы GIF и JPEG.
Отображаемое изображение определяется свойством [ Cкачайте файл, чтобы посмотреть ссылку ], которое может быть задано во время выполнения или в режиме разработки. Кроме того, изображение можно задать путем указания значения свойства [ Cкачайте файл, чтобы посмотреть ссылку ] с последующей загрузкой изображения в синхронном режиме с помощью метода [ Cкачайте файл, чтобы посмотреть ссылку ] или в асинхронном режиме с помощью метода [ Cкачайте файл, чтобы посмотреть ссылку ].
Свойство [ Cкачайте файл, чтобы посмотреть ссылку ] управляет соответствием размеров рисунка и элемента управления.
Создание рисунка на этапе разработки приложения
Чтобы добавить на форму рисунок выполните следующие действия:
Добавьте на форму элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ].
Откройте одним из следующих способов окно для задания пути изображения:
Откройте панель Задачи щелкнув по символу треугольника в правом верхнем углу элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ] и нажмите команду Выберите изображение.

Щелкните по символу в свойстве Image для элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ] в окне Свойства.
В результате откроется окно Выбор ресурса.
Нажмите кнопку Импорт, выберите графический файл и нажмите кнопку Открыть.
В результате выбранный файл будет скопирован в папку с проектом; его название появится в окне Выбор ресурса в нижнем списке, а справа появится изображение.
Нажмите ОК.
Отрегулируйте заполнение элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ] выбранным изображением одним из следующих способов:
В панели Задачи разверните список Режим изменения размера и выберите подходящий режим.

В окне Свойства для элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ] раскройте список SizeMode и выберите подходящий режим отображения рисунка.
Возможные режимы:
Normal – рисунок будет находиться в верхнем левом углу элемента управления, если рисунок крупнее элемента управления, то нижний и правый края рисунка будут обрезаны.
[ Cкачайте файл, чтобы посмотреть ссылку ] – рисунок будет находиться в центре элемента управления; если рисунок крупнее элемента управления, то края рисунка будут обрезаны. З
[ Cкачайте файл, чтобы посмотреть ссылку ] – размер элемента управления изменяется в зависимости от размера рисунка.
[ Cкачайте файл, чтобы посмотреть ссылку ] – что размер рисунка изменяется в зависимости от размера элемента управления.
Zoom – рисунок будет увеличен или уменьшен с сохранением пропорций и помешен целиком в элемент управления.

Установка изображений во время выполнения (Windows Forms)
Имеется возможность задания рисунка, отображаемого элементом управления Windows Forms [ Cкачайте файл, чтобы посмотреть ссылку ], программными средствами.
Чтобы задать рисунок программными средствами задайте свойство [ Cкачайте файл, чтобы посмотреть ссылку ] при помощи метода [ Cкачайте файл, чтобы посмотреть ссылку ] класса [ Cкачайте файл, чтобы посмотреть ссылку ], например:
private void button12_Click(object sender, EventArgs e)
{ pictureBox1.Image = Image.FromFile(@"D:\p1002.bmp");
}
Удаление графического объекта
Сначала освободите память, используемую изображением, а затем удалите графический объект следующим образом:
if (pictureBox1.Image != null)
{ pictureBox1.Image.Dispose();
pictureBox1.Image = null;
}
Этот код удалит изображение даже в том случае, если графический объект был загружен в элемент управления в режиме разработки.
Примечание. При наличии проблем с управлением памятью, она будет очищена позднее при сборке мусора.
Установка изображений во время выполнения (Windows Forms) на других элементах управления
Чтобы задать рисунок программными средствами на другом элементе управления задайте соответствующее свойство при помощи метода [ Cкачайте файл, чтобы посмотреть ссылку ] класса [ Cкачайте файл, чтобы посмотреть ссылку ].
Например, фоновый рисунок для формы можно задать с помощью кода:
glob.frm1.BackgroundImage =
Image.FromFile(System.IO.Directory.GetCurrentDirectory()[email protected]"\Ветер.jpg");
Команда System.IO.Directory.GetCurrentDirectory() осуществляет переход в текущую директорию. Текущей директорией является папка с исполняемым файлом, как правило, папка Bin. В данном примере файл Ветер.jpg помещен в папку Bin.
Удаление графического объекта с элементов управления
Удаление рисунка из элемента управления можно осуществить путем присвоения свойству, отвечающему за рисунок, значения null.
Например, фоновый рисунок для формы можно удалить с помощью кода:
glob.frm1.BackgroundImage = null;
Изменение размера рисунка на элементе управления во время выполнения проекта
Отрегулировать размещение рисунка на элементе управления программным путем можно с помощью свойства элемента управления, отвечающего за макет рисунка.
Например, фоновый рисунок для формы можно отрегулировать с помощью кода:
glob.frm1.BackgroundImageLayout = ImageLayout.Stretch;
Размещение изображения и изменение его размера во время выполнения
Чтобы изменить местоположение рисунка в элементе управления или изменить его размеры во время выполнения установите свойству [ Cкачайте файл, чтобы посмотреть ссылку ] значение [ Cкачайте файл, чтобы посмотреть ссылку ] (по умолчанию), [ Cкачайте файл, чтобы посмотреть ссылку ], [ Cкачайте файл, чтобы посмотреть ссылку ], Zoom или [ Cкачайте файл, чтобы посмотреть ссылку ].
В приведенном ниже примере в уже имеющийся на форме элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] добавляется рисунок.
private void button12_Click(object sender, EventArgs e)
{ pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
pictureBox1.Image = Image.FromFile(@"D:\p1002.bmp");
}
Примечание. Растяжение границ рисунка (особенно в растровом формате) может привести к ухудшению качества изображения.

Массив рисунков ImageList
Компонент Windows Forms [ Cкачайте файл, чтобы посмотреть ссылку ] предназначен для хранения изображений, которые могут отображаться элементами управления. Этот компонент позволяет написать код для единого унифицированного каталога изображений. Например, можно вращать рисунки, отображаемые элементом управления [ Cкачайте файл, чтобы посмотреть ссылку ], просто изменяя свойство [ Cкачайте файл, чтобы посмотреть ссылку ] этой кнопки. Кроме того, имеется возможность связать один и тот же набор изображений с несколькими элементами управления.
Набор изображений можно использовать с любым элементом управления, имеющим свойство ImageList. С набором изображений могут быть связаны следующие элементы управления: [ Cкачайте файл, чтобы посмотреть ссылку ], [ Cкачайте файл, чтобы посмотреть ссылку ], [ Cкачайте файл, чтобы посмотреть ссылку ] и [ Cкачайте файл, чтобы посмотреть ссылку ]. Чтобы связать набор изображений с элементом управления, задайте для свойства ImageList этого элемента управления имя компонента [ Cкачайте файл, чтобы посмотреть ссылку ].
Основное свойство компонента [ Cкачайте файл, чтобы посмотреть ссылку ] это свойство [ Cкачайте файл, чтобы посмотреть ссылку ], содержащее рисунки, используемые связанным элементом управления. К каждому отдельному рисунку можно получить доступ посредством значения его индекса. Количество цветов в рисунках определяется свойством [ Cкачайте файл, чтобы посмотреть ссылку ]. Все отображаемые рисунки имеют один и тот же размер, который задается свойством [ Cкачайте файл, чтобы посмотреть ссылку ]. Если размер рисунка превышает заданный, он будет пропорционально уменьшен.
Примечание. Элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] по умолчанию находится на Панели элементов во вкладке Компоненты. Элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] является невидимым.

Создание массива рисунков
Чтобы создать массив рисунков на этапе проектирования выполните следующие действия:
Добавьте на форму элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ].
Откройте одним из следующих способов окно для задания пути изображения:
Откройте панель Задачи щелкнув по символу треугольника в правом верхнем углу элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ] и нажмите команду Выберите изображение.
Щелкните по символу в свойстве Images для элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ] в окне Свойства.
В результате откроется окно Редактор коллекции изображений.
Нажмите кнопку Добавить.
Выберите изображение и нажмите кнопку Открыть.
Повторите 3,4-й шаги для добавления новых изображений.
Нажмите ОК.
Чтобы добавить рисунки с помощью программных средств используйте метод [ Cкачайте файл, чтобы посмотреть ссылку ] свойства [ Cкачайте файл, чтобы посмотреть ссылку ] набора изображений.
В следующем примере кода в уже имеющийся на форме элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] добавляется рисунок.
private void button13_Click(object sender, EventArgs e)
{System.Drawing.Image Image1 = Image.FromFile(@"D:\p1002.bmp");
imageList1.Images.Add(Image1);
}
Удаление рисунка из массива
Чтобы удалить изображение на этапе проектирования войдите в Редактор коллекции изображений (см.выше) и нажмите кнопку Удалить.
Чтобы удалить изображение с помощью программных средств используйте метод [ Cкачайте файл, чтобы посмотреть ссылку ]At:
imageList1.Images.RemoveAt(index);
Чтобы удалить все изображения на этапе проектирования войдите в Редактор коллекции изображений (см.выше), выделите используя методы Windows все изображения и нажмите кнопку Удалить.
Чтобы удалить все изображения с помощью программных средств используйте метод [ Cкачайте файл, чтобы посмотреть ссылку ]:
imageList1.Images.Clear();

Меню
Меню служат для размещения логически сгруппированных команд.

Программное меню MenuStrip

Элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] поддерживает интерфейс MDI, слияние меню, всплывающие подсказки и переполнение. Удобство использования меню можно повысить, добавив в них клавиши быстрого доступа, сочетания клавиш, флажки, значки и разделители.

Элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] может использоваться в следующих целях.
Создание легко настраиваемых, стандартных меню, поддерживающих широкий набор возможностей компоновки и пользовательского интерфейса, таких как упорядочение и выравнивание текста и изображений, операции перетаскивания, интерфейс MDI, переполнение и альтернативные режимы доступа к пунктам меню.
Поддержка типового вида и поведения операционной системы.
Согласованная обработка событий для всех контейнеров и содержащихся в них элементов аналогично обработке событий для других элементов управления.

Чтобы создать программное меню
Выберите в Панели элементов на вкладке Меню и панели инструментов элемент управления MenuStrip и добавьте его на форму.
В результате в верхней части формы появится строка программного меню, а в нижней части рабочей области проекта в области невидимых элементов иконка элемента MenuStrip:
Выберите поле MenuItem в списке с надписью "Введите здесь" в строке меню.

или
выберите в контекстном меню к иконке созданного программного меню MenuItem команду Правка элементов.
В результате появится новый пункт меню под названием toolStripMenuItem1.
В окне Свойства в свойстве Text введите название нового меню, например "Файл".
Как только вы присвоите название новому меню в строке меню, справа появится поле нового элемента (чтобы вы могли добавить новое меню), а другое меню нового элемента откроется под первым меню, чтобы вы могли добавлять подменю.

Синхронизация меню на разных формах
В некоторых приложениях вид дочернего окна интерфейса MDI может отличаться от родительского окна MDI. Например, если родительский интерфейс MDI таблица, то дочер
·ний интерфейс MDI может быть диаграммой. В этом случае может потребоваться обновление содержимого меню родительского интерфейса MDI содержимым меню дочернего интерфейса MDI при активировании различных видов дочерних окон интерфейса MDI.
В следующей процедуре свойства [ Cкачайте файл, чтобы посмотреть ссылку ], [ Cкачайте файл, чтобы посмотреть ссылку ], [ Cкачайте файл, чтобы посмотреть ссылку ] и [ Cкачайте файл, чтобы посмотреть ссылку ] используются для добавления дочернего меню MDI в родительское меню MDI. При закрытии дочернего окна MDI из родительского интерфейса MDI удаляются добавленные пункты меню.
Пусть существуют родительская форма Form1 с программным меню и дочерняя форма Form2 со своим программным меню.
Чтобы добавить пункт дочернего меню в родительский интерфейс MDI
Добавьте [ Cкачайте файл, чтобы посмотреть ссылку ] в Form1 и присвойте свойству [ Cкачайте файл, чтобы посмотреть ссылку ] компонента [ Cкачайте файл, чтобы посмотреть ссылку ] значение true.
На форме Form2 присвойте свойству [ Cкачайте файл, чтобы посмотреть ссылку ] меню [ Cкачайте файл, чтобы посмотреть ссылку ] значение true.
Свойству [ Cкачайте файл, чтобы посмотреть ссылку ] элементов меню дочерней формы, которые должны автоматически добавиться в родительское меню присвойте значение [ Cкачайте файл, чтобы посмотреть ссылку ].
Пример.
Пусть Меню формы Form1 имеет вид:

Меню формы Form2 имеет вид:

Если выполнить только первые два шага алгоритма создания синхронизированного меню, то получим два пункта Формы при открытии дочерней формы:

Свойство [ Cкачайте файл, чтобы посмотреть ссылку ] имеет несколько значений:
Append – последовательно слева направо добавляет пункты дочернего меню вместе с подпунктами в родительское меню.
Insert – вставляет пункт дочернего меню вместе с подпунктами в родительское меню в соответствии с индексом, заданным в свойстве MergeIndex. Если MergeIndex=-1, то дочернее меню остается в дочерней форме, например:

Replace – ищет текстовое совпадение пунктов родительского и дочернего меню. Если текстовое совпадение найдено, то заменяет родительское меню дочерним меню, например:

Remove – удаляет родительское меню, например:

MarchOnly – ищет текстовое совпадение пунктов родительского и дочернего меню. Если текстовое совпадение найдено, то оставляет оба меню, но подпункты из совпадающих меню добавляются в родительское. Дочернее меню видимо, но неактивно. Например:

Примечание. Каждое меню дочерней формы обрабатывается отдельно. В данном примере у подменю Закрыть свойство [ Cкачайте файл, чтобы посмотреть ссылку ] имеет значение Append. Если его поменять на другое значение, эффект будет иным.

Создание списка в окне интерфейса MDI с помощью MenuStrip
Для создания приложений, которые могут одновременно открывать несколько документов, а также копировать содержимое из одного документа и вставлять в другой, используется интерфейс MDI.
Эта процедура показывает, как создать список всех активных дочерних форм на меню родительского окна.
Пусть существуют родительская форма Form1 с программным меню и дочерняя форма Form2 со своим программным меню.
Чтобы создать список окон MDI для объекта MenuStrip:
присвойте свойству [ Cкачайте файл, чтобы посмотреть ссылку ] элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ] родительского окна значение [ Cкачайте файл, чтобы посмотреть ссылку ] с номером того пункта, в котором должен список создаваться.
Пример. Пусть в родительской форме меню Окна имеет название [ Cкачайте файл, чтобы посмотреть ссылку ]4, тогда если [ Cкачайте файл, чтобы посмотреть ссылку ]=[ Cкачайте файл, чтобы посмотреть ссылку ]4 для родительского элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ], то в результате получим список открытых дочерних форм следующего вида:


Блокирование доступа к элементам меню ToolStripMenuItem
Можно ограничить или расширить набор команд, которые может выполнить пользователь, путем включения и отключения пунктов меню в ответ на действия пользователя. При создании меню пункты меню включены по умолчанию, однако это можно изменить с помощью свойства [ Cкачайте файл, чтобы посмотреть ссылку ]. Изменить значение этого свойства можно в процессе разработки в окне Свойства или программным путем, добавив в код соответствующую настройку.
Чтобы отключить пункт меню программными средствами: в методе, который использовался для задания свойства пункта меню, добавьте код для присвоения свойству [ Cкачайте файл, чтобы посмотреть ссылку ] значения false.
menuItem1.Enabled = false;
Совет. Отключение первого пункта меню или элемента верхнего уровня в меню приведет к отключению всех пунктов меню. Аналогичным образом, отключение пункта меню, который имеет вложенное меню, приведет к отключению пунктов вложенного меню. Если пользователю становятся недоступны все команды конкретного меню, хорошим тоном считается отключать и скрывать меню целиком и предоставлять пользователю чистый интерфейс. Обязательно нужно скрывать и отключать меню, потому что скрытие меню не запрещает доступ к командам меню с помощью сочетаний клавиш. Чтобы скрыть меню полностью, установите для свойства [ Cкачайте файл, чтобы посмотреть ссылку ] меню верхнего уровня значение false.
Скрытие объектов ToolStripMenuItem
Скрытие пунктов меню позволяет управлять пользовательским интерфейсом приложения и ограничивать использование команд пользователями. Во многих случаях, когда все пункты меню становятся недоступными, необходимо скрыть меню целиком. Это позволит пользователю меньше отвлекаться. Более того, можно одновременно скрыть и отключить меню или пункт меню, поскольку скрытие меню не запрещает доступ пользователя к командам меню с помощью сочетаний клавиш.
Чтобы отключить пункт меню программными средствами: в методе, который использовался для задания свойства элемента меню, добавьте код для присвоения свойству [ Cкачайте файл, чтобы посмотреть ссылку ] значения false.
menuItem3.Visible = false;

Контекстное меню ContextMenu
Компонент ContextMenu (Windows Forms) используется для предоставления пользователям доступного контекстного меню часто используемых команд, связанных с выделенным объектом.

Элементы контекстного меню часто представляют собой группы элементов из основных меню, встречающихся в различных местах приложения. Доступ к контекстным меню обычно осуществляется с помощью правой кнопки мыши. В формах Windows Forms они связаны с другими элементами управления.
Связь контекстного меню с элементом управления создается путем задания для свойства [ Cкачайте файл, чтобы посмотреть ссылку ] элемента управления компонента [ Cкачайте файл, чтобы посмотреть ссылку ]. Одно контекстное меню можно связать с несколькими элементами управления, но каждому элементу управления должно соответствовать только одно контекстное меню.
Ключевым свойством компонента [ Cкачайте файл, чтобы посмотреть ссылку ] является свойство [ Cкачайте файл, чтобы посмотреть ссылку ]. Добавление пунктов меню может производиться путем программного создания объектов [ Cкачайте файл, чтобы посмотреть ссылку ] и добавления их в свойство [ Cкачайте файл, чтобы посмотреть ссылку ] контекстного меню. Поскольку элементы контекстного меню обычно заимствуются из других меню, чаще всего они добавляются в контекстное меню путем копирования.
Элементы контекстного меню можно удалять без возможности восстановления; однако во время выполнения более целесообразным может оказаться скрытие или отключение элементов.
Чтобы создать контекстное меню
Выберите в Панели элементов на вкладке Меню и панели инструментов элемент управления ContextMenuStrip и добавьте его на форму.
В результате в верхней части формы появится строка контекстного меню, а в нижней части рабочей области проекта в области невидимых элементов иконка элемента ContextMenuStrip:
Выберите поле MenuItem в списке с надписью "Введите здесь" в строке меню.
или
выберите в контекстном меню к иконке созданного контекстного меню ContextMenuItem команду Правка элементов.
или
щелкните по символу треугольника в верхнем правом углу иконки контекстного меню, чтобы открыть панель Задачи, и выберите команду Правка элементов:
В результате появится новый пункт меню под названием toolStripMenuItem№.
В окне Свойства в свойстве Text введите название нового меню, например "Открыть".
Как только будет присвоено название новому меню в строке меню, справа появится поле нового элемента (чтобы вы могли добавить новое меню), а другое меню нового элемента откроется под первым меню, чтобы можно было добавлять подменю.

Привязка контекстного меню к элементу управления.
Если в приложении предусмотрено, что при нажатии правой кнопки мыши на некотором объекте должно появляться контекстное меню, то необходимо:
Создать контекстное меню
Привязать к элементу управления при щелчке правой мыши на котором в будущем оно должно появляться.
Чтобы привязать контекстное меню к элементу управления:
Откройте окно Свойства для элемента управления, к которому должно быть привязано контекстное меню.
Свойству СontextMenuStrip присвойте имя привязываемого контекстного меню.
Примечание. Все остальные операции над контекстным меню идентичны описанным выше операциям над программным меню.

Панель инструментов ToolStrip
Элемент управления Windows Forms [ Cкачайте файл, чтобы посмотреть ссылку ] используется в формах в качестве панели управления, на которой выводится ряд раскрывающихся меню и кнопок с растровыми изображениями, активизирующими команды.

Таким образом, щелчок кнопки в панели инструментов равносилен выбору команды меню. Для кнопок можно настроить режим поведения кнопок, раскрывающихся меню или разделителей. Обычно в панели инструментов содержатся кнопки и меню, соответствующие элементам структуры меню приложения, которые предоставляют быстрый доступ к наиболее часто используемым в приложении функциям и командам.
Элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] обычно закреплен в верхней части родительского окна, но его можно также закрепить с любой стороны окна. В панели инструментов могут отображаться подсказки, когда пользователь наводит указатель мыши на кнопку. Подсказка это небольшое всплывающее окно с кратким описанием назначения кнопки или меню. Для отображения всплывающих подсказок нужно установить для свойства [ Cкачайте файл, чтобы посмотреть ссылку ] значение true.
Кнопки панели инструментов можно разделить на логические группы с помощью разделителя. Разделителем является кнопка панели инструментов [ Cкачайте файл, чтобы посмотреть ссылку ]. В панели инструментов она отображается в виде линии, разделяющей кнопки.
На кнопках [ Cкачайте файл, чтобы посмотреть ссылку ] можно отображать значки, чтобы пользователи легче их опознавали. Это можно сделать, добавив изображения в компонент [ Cкачайте файл, чтобы посмотреть ссылку ] и затем связав компонент [ Cкачайте файл, чтобы посмотреть ссылку ] с элементом управления [ Cкачайте файл, чтобы посмотреть ссылку ].
Чтобы создать панель инструментов:
Выберите в Панели элементов на вкладке Меню и панели инструментов элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] и добавьте его на форму.
В результате вдоль верхней границы формы появится полоска для размещения на ней объектов меню.
Иконка панели инструментов отобразится в нижней части рабочей области конструктора в области невидимых элементов.
На полоске панели инструментов при создании находится редактор кнопок панели инструментов. При наведении курсора мыши на этот редактор появляется подсказка Добавить ToolStripButton.

Раскройте список редактора объектов панели инструментов и выберите подходящий объект. Например, Button.
В результате на панели инструментов слева от редактора появится кнопка:

Задание рисунка на кнопке
Чтобы задать значок для кнопки панели инструментов:
В окне Свойства для элемента управления toolStripButton№ (кнопка) свойству Image в качестве значения присвойте имя графического файла.
С помощью свойства ImageAlign отредактируйте местоположение рисунка на кнопке, а с помощью свойства ImageScaling размер изображения на кнопке.
Генерирование событий меню для кнопок элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ]
Чтобы создать обработчик нажатия кнопки на панели инструментов щелкните дважды по этой кнопке в режиме конструктора. В программе будет автоматически сгенерирован код функции. В тело функции добавьте команды, которые должны выполняться при нажатии кнопки.
Выделение кнопки после ее нажатия
Чтобы утопить кнопку после нажатия присвойте ее свойству CheckOnClick значение true. Если оставить значение false (по умолчанию), то кнопка после нажатия не изменит своего вида.
Использование всплывающих подсказок в элементах управления ToolStrip
Подсказку [ Cкачайте файл, чтобы посмотреть ссылку ] можно отобразить или скрыть для любого объекта элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ].
Чтобы включить отображение всплывающей подсказки задайте для свойства [ Cкачайте файл, чтобы посмотреть ссылку ] элемента управления значение true.
Чтобы изменить текст подсказки объекта элемента управления ToolStrip присвойте свойству [ Cкачайте файл, чтобы посмотреть ссылку ] объекта новое значение.

Строка состояния StatusStrip
Элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] используется в формах в качестве области, обычно отображающейся в нижней части окна, в которой выводятся различные сведения о состоянии приложения.

Элементы управления StatusStrip могут включать панели строки состояния, на которых выводится текст или значки с отображением состояния, или анимированный набор значков, показывающий выполнения процесса (например, Microsoft Word, указывающий на сохранение документа).
Чтобы создать строку состояния:
Выберите в Панели элементов на вкладке Меню и панели инструментов элемент управления StatusStrip и добавьте его на форму.
В результате вдоль нижней границы формы появится полоска строки состояния с редактором ее объектов.
Откройте список в редакторе объектов и выберите подходящий элемент.
Возможные объекты:
StatusLabel – область строки состояния для отображения текста, например, координат текущего положения курсора или сообщения об ошибке;
ProgressBar – индикатор процесса, показывает его текущее положение.
Если выбранный объект является DropDownButton или SplitButton, то двойным щелчком по элементу созданного списка создайте обработчик события выбора элемента списка.
Если объект является областью для вывода текста StatusLabel, то пропишите функцию обработки события выбора того элемента управления, в результате которого текст должен отобразиться в строке состояния.
Если объект является индикатором процесса ProgressBar, то пропишите функцию обработки события выбора того элемента управления, в результате которого должен работать индикатор.
Чтобы добавить в строку состояния текущее время:
Создайте в строке состояния объект StatusLabel.
Добавьте на форму элемент управления Timer.
В окне Свойства для элемента управления Timer присвойте свойству Interval значение 1000, свойству Enabled значение true.
В окне Свойства для элемента управления Timer перейдите в режим События и двойным щелчком в поле Tick создайте обработчик события со следующим кодом:
private void timer1_Tick(object sender, EventArgs e)
{
toolStripStatusLabel1.Text = DateTime.Now.ToLongTimeString();
}
Примечание: Метод ToLongTimeString() выделяет из константы, содержащей системные дату и время, только время в формате часы:минуты:секунды.
Метод Now возвращает константу, содержащую системные дату и время.
Можно воспользоваться также методами:
ToShortTimeString() – время в формате часы:минуты;
ToLongDateString() – дата в текстовом формате день месяц год, например: 11 августа 2010г.
ToShortDateString() – дата в числовом формате день.месяц.год, например: 11.08.2010.

Таблицы DataGridView
Элемент управления Windows Forms [ Cкачайте файл, чтобы посмотреть ссылку ]View позволяет отобразить данные в виде набора строк и столбцов. В простейшем случае сетка привязана к источнику данных с помощью единственной таблицы, не содержащей связей. В этом случае данные отображаются в простых сроках и столбцах, как в электронной таблице.
Элемент управления DataGridView предоставляет мощный и гибкий способ отображения данных в табличном формате. Элемент управления DataGridView можно использовать для представления в режиме только чтения небольших объектов данных; можно расширить этот элемент для представления крупных объемов данных в режиме редактирования.
Элементы управления DataGridView обычно используются для отображения одной таблицы из набора данных.
Представление массивов с помощью элемента управления DataGridView
Чтобы создать массив и отобразить его на форме:
Выберите в Панели элементов на вкладке Данный элемент управления DataGridView и добавьте его на форму.
Установите ширину столбцов. Для этого отобразите панель Задачи, щелкнув по символу треугольника в верхнем правом углу элемента управления DataGridView.

Выберите команду Правка столбцов. В результате отобразится окно для правки столбцов.
Нажмите кнопку Добавить.
Если заголовок столбцу не нужен или он будет установлен программным способом, то сотрите его и нажмите последовательно кнопки Добавить и Закрыть.
В результате Вы вернетесь в окно Правка столбцов.
В этом окне установите следующие свойства:
AutoSizeMode=AllCells (ширина всех столбцов одинакова)
Width=25 (значение ширины)
В окне Свойства для элемента управления DataGridView присвойте свойству AutoSizeColumnsMode (способ автоматического выравнивания ширины столбцов) значение AllCells.
Сделайте невидимыми заголовочные строки и столбцы:
ColumnHeaderVisible=false
RowHeaderVisible=false
В функции обработки события, в результате которого должна отобразиться таблица на форме (открытие формы, нажатие кнопки и т.д.), пропишите код создания массива. Обращение к ячейке DataGridView осуществляется с помощью свойства:
dataGridView1.Rows[i].Cells[j].Value
Размер матрицы задается с помощью свойств:
dataGridView1.RowCount и dataGridView1.ColumnCount
Пример. Разместим на форме два текстовых поля, в которые будем вводить размеры матрицы. По кнопке Создать автоматически сгенерированная матрица должна отобразиться в таблице DataGridView:
13 SHAPE \* MERGEFORMAT 1415
Для этого в обработчике события нажатия кнопки Создать пропишем код:
private void button1_Click(object sender, EventArgs e)
{ Random r=new Random();
int i, j,m,n;
// Считываем из текстовых полей размеры матрицы
m=Convert.ToInt16(textBox1.Text);
n=Convert.ToInt16(textBox2.Text);
// Задаем размеры матрицы
dataGridView1.RowCount = m; dataGridView1.ColumnCount = n;
//заполняем матрицу случайными числами из диапазона [-5;8]
for (i = 0; i < m; i++)
for (j = 0; j < n; j++)
dataGridView1.Rows[i].Cells[j].Value = (r.Next(14)-5).ToString();
}
Примечание. В данном примере таблицу можно заполнять вручную на форме. Чтобы закрыть таблицу от редактирования задайте в режиме конструктора в окне Свойства или программно для элемента управления DataGridView свойство Enabled=false.

Форматирование
В элементе управления [ Cкачайте файл, чтобы посмотреть ссылку ]View можно настроить стили границ, стили сетки, шрифты, свойства заголовка, выравнивание данных и чередующиеся фоновые цвета для строк.
Размер таблицы
В приведенном выше примере видно, что размеры таблицы DataGridView не совпадают с размерами матрицы, что визуально устроит не каждого пользователя. Чтобы настроить размер таблицы DataGridView программным способом необходимо прописать код, аналогичный следующему:
dataGridView1.Width = (ширина столбца+1)*n;
dataGridView1.Height =(высота строки+1)*m;
Интерфейс таблицы
Чтобы создать определенный внешний вид для элемента управления DataGridView задайте нужным образом следующие свойства:
Свойство
Описание

[ Cкачайте файл, чтобы посмотреть ссылку ]DefaultCellStyle
Свойство DefaultCellStyle определяет стиль всех строк таблицы. Если в свойстве [ Cкачайте файл, чтобы посмотреть ссылку ]DefaultCellStyle заданы другой цвет, шрифт или фон шрифта, то все нечетные строки выделяются этим стилем (строки 1, 3, 5 и т.д.).

DefaultCellStyle
Стиль по умолчанию. Включает такие параметры как Font, ForeColor, BackColor и др.

[ Cкачайте файл, чтобы посмотреть ссылку ]
Если свойства [ Cкачайте файл, чтобы посмотреть ссылку ] и [ Cкачайте файл, чтобы посмотреть ссылку ]DefaultCellStyle определяют цвета строк таблицы, то свойство [ Cкачайте файл, чтобы посмотреть ссылку ] определяет цвет области, незанятой строками, которая видна, только когда таблица прокручена вниз или содержит небольшое количество строк.

[ Cкачайте файл, чтобы посмотреть ссылку ]
Стиль границы таблицы.

[ Cкачайте файл, чтобы посмотреть ссылку ]
Шрифт текста в сетке.

[ Cкачайте файл, чтобы посмотреть ссылку ]
Цвет шрифта, которым представлены данные в строках сетки.

СellBorderStyle
Стиль границы ячейки.

[ Cкачайте файл, чтобы посмотреть ссылку ]
Цвет линий таблицы.

[ Cкачайте файл, чтобы посмотреть ссылку ]HeaderDefaultCellStyle
Стиль, использующийся для ячеек заголовков строк по умолчанию. Включает такие параметры как Font, ForeColor, BackColor и др.

ColumnHeaderDefaultCellStyle
Стиль, использующийся для ячеек заголовков столбцов по умолчанию. Включает такие параметры как Font, ForeColor, BackColor и др.

[ Cкачайте файл, чтобы посмотреть ссылку ]
Фоновый цвет выделенной строки или ячейки.

[ Cкачайте файл, чтобы посмотреть ссылку ]
Цвет текста выделенной строки или ячейки. Свойство является составляющей свойств [ Cкачайте файл, чтобы посмотреть ссылку ]DefaultCellStyle, DefaultCellStyle, RowDefaultCellStyle.

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

Определение номера текущей ячейки
Свойство [ Cкачайте файл, чтобы посмотреть ссылку ] определяет выбранную ячейку.
Пример. Чтобы при перемещении по таблице в надписи Label4 отображалась надпись с №ячейки, например: «№ текущей ячейки = [1,2]» пропишите в событии Click элемента управления DataGridView код аналогичный следующему:
private void dataGridView1_Click(object sender, EventArgs e)
{
int i,j;
j=dataGridView1.CurrentCell.ColumnIndex;
i=dataGridView1.CurrentCell.RowIndex;
label4.Text = "№текущей ячейки=[" + i.ToString() + ',' + j.ToString()+']';
}
или
private void dataGridView1_Click(object sender, EventArgs e)
{
int i, j;
dataGridView1.HitTest(i, j);
label4.Text = "№текущей ячейки=[" + i.ToString() + ',' + j.ToString()+ ']';
}

Диалоговые окна OpenFileDialog и SaveFileDialog
Компоненты Windows Forms [ Cкачайте файл, чтобы посмотреть ссылку ] и SaveFileDialog являются стандартными диалоговыми окнами. Эти компоненты аналогичны диалоговым окнам Открыть файл и Сохранить файл операционной системы Windows.
Компоненты [ Cкачайте файл, чтобы посмотреть ссылку ] и SaveFileDialog используются в приложении Windows в качестве простого решения для выбора файлов вместо диалогового окна, настраиваемого самостоятельно. Использование стандартных диалоговых окон Windows помогает создавать приложения, основные функциональные возможности которых хорошо знакомы пользователям. Однако следует помнить, что при использовании компонент [ Cкачайте файл, чтобы посмотреть ссылку ] и SaveFileDialog необходимо разработать собственный алгоритм открытия файла и записи данных в файл.
Используйте метод [ Cкачайте файл, чтобы посмотреть ссылку ] для отображения диалогового окна во время выполнения. При помощи свойства [ Cкачайте файл, чтобы посмотреть ссылку ] элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ] пользователям можно разрешить выбор нескольких файлов для открытия в приложения. Кроме того, с помощью свойства [ Cкачайте файл, чтобы посмотреть ссылку ] элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ] можно задать отображение в диалоговом окне флажка "Только для чтения". Свойство [ Cкачайте файл, чтобы посмотреть ссылку ] компонентов [ Cкачайте файл, чтобы посмотреть ссылку ] и SaveFileDialog задает строку фильтра для текущего имени файла, которая определяет варианты, отображающиеся в поле "Тип файлов" диалогового окна.
Добавленный в форму компонент [ Cкачайте файл, чтобы посмотреть ссылку ] или SaveFileDialog появляется в нижней области конструктора Windows Forms в области невидимых объектов.

Чтение данных их файла и запись в файл в C#
Для операций ввода-вывода служит пространство имен System.IO.
Вот краткий обзор наиболее важных классов и методов из этого пространства имен:
BinaryReader – метод, позволяющий читать из файла данные различных типов (целые, вещественные, логические и т. п.);
BinaryWriter – метод, позволяющий записывать в файл данные различных типов (целые, вещественные, логические и т. п.);
Directory – класс для работы с папками;
DirectoryInfo – класс для работы с одной определенной папкой;
File – класс для работы с файлом;
FileInfo – класс для работы с одним определенным файлом;
Path – класс для работы с файловыми путями;
Перечисление FileAttributes – атрибуты файла;
Перечисление FileMode – возможные способы открытия файла;
Перечисление FileAccess содержит константы, показывающие, открыт ли файл для чтения, записи и др.;
FileSystemWatcher – класс для отслеживания изменений в файловой системе;
Перечисление NotifyFilters – параметры, по которым происходит отслеживание изменений в файловой системе;
Перечисление WatcherChangeTypes –изменения, отслеживаемые в файловой системе.

Запись в файл с использованием компонента SaveFileDialog
Чтобы записать данные в файл выполните следующие действия:
Выберите в Панели элементов на вкладке Диалоговые окна элемент управления SaveFileDialog и добавьте его на форму в область невидимых элементов:

Настройте свойства элемента управления SaveFileDialog в окне Свойства:
Filter=Название1|фильтр1|Название2|фильтр2,
Например:
Filter= Текстовые файлы|*.txt|Все файлы|*.*
Filter= Текстовые файлы|*.txt
DefaultExt=расширение – расширение, которое будет приписано к имени файл, если пользователь не ввел свое расширение. При этом свойство AddExtension (автоматическое приписывание расширения файлам) должно иметь значение true.
FilterIndex=№ – индекс фильтра файлов по умолчанию. Нумерация начинается с единицы.
InitialDirectory=путь/папка – исходная папка диалогового окна.
Title=название – строка, отображаемая в заголовке программы
Подключите библиотеку System.IO с помощью команды using в разделе подключения библиотек:
using System.IO;
Для осуществления записи информации в текстовый файл необходимо прописать обработчик события для элемента управления, например обработчик нажатия кнопки:
private void button1_Click(object sender, EventArgs e)
{// Открываем стандартное окно Windows для сохранения информации в файл
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
// Создаем файловую переменную, ссылающуюся на имя файла, выбранного в диалоговом окне сохранения и открываем файл для записи
StreamWriter FS = new StreamWriter(saveFileDialog1.FileName);
// или
// StreamWriter FS = new StreamWriter(saveFileDialog1.FileName, true,
System.Text.Encoding.GetEncoding(1251));
// Записываем информацию в файл
FS.Write("Здесь можно вставить текст, например, из текстового поля - textBox1.Text");
// Закрываем файл
FS.Close();
}
}
При записи с помощью метода Write("текст формат") можно использовать строку форматирования, которая имеет следующий вид:
{N,W:F},
где N - номер параметра; W - ширина поля; F - формат вывода.
Допустимые форматы ввода:
d - десятичный формат. Позволяет задать общее количество знаков (при необходимости число дополняется слева нулями).
f - формат с фиксированной точностью. Позволяет задать количество знаков после запятой.
x - шестнадцатеричный формат.
c - денежный формат (добавляет знак доллара и показывает два знака после запятой).
e - вывод числа в экспоненциальной форме.
Пример. Сохранить в файл число в поле шириной четыре знака с добавлением впереди числа нулей.

Код:
private void button14_Click(object sender, EventArgs e)
{
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
StreamWriter FS = new StreamWriter(saveFileDialog1.FileName);
int a=Convert.ToInt16(textBox1.Text);
//Если введено a=38, то выведется 0038
FS.Write ("a={0:d4}", a);
FS.Close();
}
}
Примечание. Если путь к исходной папке задан неверно, то открывается папка «Мои документы».
Примечание. Если файл уже существует, то система выведет стандартное для операционной системы Windows предупреждение с предложением файл заменить.
Примечание. За действие, выполняемое в случае наличия выбранного файла отвечает второй аргумент в команде new StreamWriter:
new StreamWriter(имя файла, действие если файл уже существует, кодировка).
Если вторым аргументом стоит значение True, то произойдет дозапись в файл. Если вторым аргументом стоит значение False, то старая информация из файла будет стерта, а на ее место записана новая.

Запись двумерного массива размера [n,m] в файл
Чтобы записать в файл данные из таблицы dataGridView в форме матрицы необходимо прописать код, аналогичный следующему:
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{ StreamWriter FS = new StreamWriter(saveFileDialog1.FileName);
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
FS.Write("{0,3}", dataGridView1[j, i].Value);
};
FS.WriteLine();
};
FS.Close();
}
Примечание. Ширина одного столбца матрицы в файле равно 3.
Примечание. Один элемент массива можно записать в файл следующим образом:
FS.Write("\t {0}", A[1, 1]);

Чтение данных из файла
Алгоритм чтения данных из файла схож с алгоритмом записи данных в файл: компонент SaveFileDialog следует заменить на компонент [ Cкачайте файл, чтобы посмотреть ссылку ], установить для компонента [ Cкачайте файл, чтобы посмотреть ссылку ] свойства, аналогичные свойствам компонента SaveFileDialog. Прописать код, аналогичный следующему:
private void button1_Click(object sender, EventArgs e)
{string s;
// Открываем стандартное окно Windows для чтения информации из файла
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
// Создаем файловую переменную, ссылающуюся на имя файла, выбранного в диалоговом окне чтения и открываем файл для считывания данных
StreamReader FS = new StreamReader (openFileDialog1.FileName);
// Считываем информацию из файла
s= FS.Readline();
// Закрываем файл
FS.Close();
}
}
Пример. Строка считывается из файла и прописывается на кнопке.
private void button15_Click(object sender, EventArgs e)
{ string s;
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{ StreamReader FS = new StreamReader (openFileDialog1.FileName);
s = FS.ReadLine();
FS.Close();
button15.Text = s;
}
}

Чтение двумерного массива размера [n,m] из файла
Чтобы считать из файла данные и записать их в таблицу dataGridView необходимо прописать код, аналогичный следующему:
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{ StreamReader FS = new StreamReader(openFileDialog1.FileName);
for (i = 0; i < n; i++)
{ s = FS.ReadLine();
for (j = 0; j < m; j++)
{ dataGridView1[j, i].Value = s.Substring(0, 3);
s = s.Substring(3, s.Length-3);
};
};
FS.Close();
}
Примечание. Ширина одного столбца матрицы в файле равно 3.

Работа с цветами ColorDialog
Компонент Windows Forms [ Cкачайте файл, чтобы посмотреть ссылку ] является стандартным диалоговым окном, в котором пользователь может выбрать цвет из палитры, а также добавить в палитру дополнительные цвета. Это окно аналогично диалоговому окну для выбора цветов в других приложениях Windows.
Внешний вид компонента Windows Forms [ Cкачайте файл, чтобы посмотреть ссылку ] можно настроить с помощью набора его свойств. В этом диалоговом окне два раздела: в первом представлены основные цвета, во втором средства для настройки цветов пользователем.
Большинство свойств ограничивают набор цветов, которые пользователь может выбрать в этом диалоговом окне. Для отображения диалогового окна вызывается метод [ Cкачайте файл, чтобы посмотреть ссылку ].
Цвет, выбранный в диалоговом окне, возвращается в свойстве [ Cкачайте файл, чтобы посмотреть ссылку ].
Если для свойства [ Cкачайте файл, чтобы посмотреть ссылку ] задано значение true, пользователь может задавать собственные цвета. Если для свойства [ Cкачайте файл, чтобы посмотреть ссылку ] задано значение false, кнопка "Определить цвет" недоступна и пользователь может работать только со стандартными цветами палитры.
Если для свойства [ Cкачайте файл, чтобы посмотреть ссылку ] задано значение true, пользователь не может выбирать полутона, для выбора доступны только чистые цвета.
Если для свойства [ Cкачайте файл, чтобы посмотреть ссылку ] задано значение true, в диалоговом окне отображаются все доступные цвета в наборе основных цветов.

Создание диалогового окна для работы с цветами
Чтобы создать диалоговое окно для выбора цвета выполните следующие действия:
Выберите в Панели элементов на вкладке Диалоговые окна элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] и добавьте его на форму в область невидимых элементов:

Настройте внешний вид диалогового окна цветов задав нужные значения для свойств [ Cкачайте файл, чтобы посмотреть ссылку ], [ Cкачайте файл, чтобы посмотреть ссылку ] и [ Cкачайте файл, чтобы посмотреть ссылку ], например:
colorDialog1.FullOpen = true;
colorDialog1.AnyColor = true;
colorDialog1.SolidColorOnly = false;
Выбор цвета с помощью компонента ColorDialog
Отобразите диалоговое окно с помощью метода [ Cкачайте файл, чтобы посмотреть ссылку ].
С помощью свойства [ Cкачайте файл, чтобы посмотреть ссылку ] определите, как было закрыто диалоговое окно.
С помощью свойства [ Cкачайте файл, чтобы посмотреть ссылку ] компонента [ Cкачайте файл, чтобы посмотреть ссылку ] задайте выбранный цвет.
В приведенном ниже примере обработчик событий [ Cкачайте файл, чтобы посмотреть ссылку ] элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ] открывает компонент [ Cкачайте файл, чтобы посмотреть ссылку ]. Когда цвет выбран и пользователь нажимает кнопку ОК, фоновый цвет элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ] меняется на выбранный цвет. В примере предполагается, что на форме есть элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] и компонент [ Cкачайте файл, чтобы посмотреть ссылку ].
private void button1_Click(object sender, System.EventArgs e)
{ if(colorDialog1.ShowDialog() == DialogResult.OK)
button1.BackColor = colorDialog1.Color;
}
Добавьте в конструктор формы следующий код, чтобы зарегистрировать обработчик событий.

Шрифты FontDialog
Компонент Windows Forms [ Cкачайте файл, чтобы посмотреть ссылку ] является стандартным диалоговым окном, аналогичным окну Windows Шрифт. Он используется для предоставления шрифтов, установленных в операционной системе. Этот компонент используется в приложении Windows в качестве простого решения для выбора шрифтов вместо диалогового окна, настраиваемого самостоятельно.
По умолчанию в диалоговом окне отображаются списки "Шрифт", "Стиль" и "Размер"; поля флажков для таких эффектов, как зачеркивание и подчеркивание; раскрывающийся список "Набор символов"; поле, в котором показан образец шрифта. (Набор символов определяет, какие символы доступны для данного шрифта: например, иврит или японский.) Чтобы вывести диалоговое окно шрифтов, следует вызвать метод [ Cкачайте файл, чтобы посмотреть ссылку ].
Компонент [ Cкачайте файл, чтобы посмотреть ссылку ] обладает рядом свойств, определяющих его внешний вид. Свойствами, задающими параметры диалогового окна, являются [ Cкачайте файл, чтобы посмотреть ссылку ] и [ Cкачайте файл, чтобы посмотреть ссылку ]. Свойство [ Cкачайте файл, чтобы посмотреть ссылку ] задает шрифт, стиль, размер, набор символов и эффекты, например: Arial, 10pt, style=Italic, Strikeout.

Создание диалогового окна для выбора шрифта
Чтобы создать диалоговое окно для выбора шрифта выберите в Панели элементов на вкладке Диалоговые окна элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] и добавьте его на форму в область невидимых элементов:

Отображение списка шрифтов с помощью компонента FontDialog
Чтобы выбрать свойства шрифта с помощью компонента FontDialog
Отобразите диалоговое окно с помощью метода [ Cкачайте файл, чтобы посмотреть ссылку ].
С помощью свойства [ Cкачайте файл, чтобы посмотреть ссылку ] определите, как было закрыто диалоговое окно.
Для задания требуемого шрифта воспользуйтесь свойством [ Cкачайте файл, чтобы посмотреть ссылку ].
В приведенном ниже примере обработчик события [ Cкачайте файл, чтобы посмотреть ссылку ] элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ] открывает компонент [ Cкачайте файл, чтобы посмотреть ссылку ]. Когда шрифт выбран и пользователь нажимает кнопку ОК, свойство [ Cкачайте файл, чтобы посмотреть ссылку ] элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ] приобретает значение выбранного шрифта. Пример предполагает, что в форме есть элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ], элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] и компонент [ Cкачайте файл, чтобы посмотреть ссылку ].
private void button1_Click(object sender, System.EventArgs e)
{ if(fontDialog1.ShowDialog() == DialogResult.OK)
textBox1.Font = fontDialog1.Font;
}

Счетчик DomainUpDown

Элемент управления Windows Forms [ Cкачайте файл, чтобы посмотреть ссылку ] по сути представляет собой сочетание текстового поля и пары кнопок для перемещения вверх и вниз по списку.
Он выводит и задает текстовую строку в списке вариантов. Пользователь может выбрать строку, перемещаясь по списку с помощью кнопок со стрелками вверх и вниз, с помощью клавиш со стрелками ВВЕРХ и ВНИЗ или введя строку, совпадающую с элементом в списке. Один из возможных способов применения этого элемента управления выбор элементов из списка имен, расположенных в алфавитном порядке.
Примечание. Для сортировки списка свойству [ Cкачайте файл, чтобы посмотреть ссылку ] необходимо присвоить значение true.
По функции данный элемент управления аналогичен списку или полю со списком, но занимает очень мало места.
Ключевые свойства элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ] и [ Cкачайте файл, чтобы посмотреть ссылку ]. Свойство [ Cкачайте файл, чтобы посмотреть ссылку ] содержит список объектов, текстовые значения которых отображаются в элементе управления. Если для свойства [ Cкачайте файл, чтобы посмотреть ссылку ] задано значение true, при прокрутке до последнего элемента следом за ним выводится первый элемент списка и наоборот.
Примечание. Этот элемент управления выводит только текстовые строки. Для вывода числовых значений следует использовать элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ].

Создание счетчика
Чтобы создать счетчик:
Выберите в Панели элементов на вкладке Все формы Windows Form элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] и добавьте его на форму.
В окне Свойства элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ] в свойстве [ Cкачайте файл, чтобы посмотреть ссылку ] нажмите кнопку с многоточием () для запуска редактора списка.

Введите список по одному элементу в строке и нажмите кнопку ОК.
В окне Свойства элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ] в свойстве [ Cкачайте файл, чтобы посмотреть ссылку ] введите название элемента из списка, который должен отображаться в списке по умолчанию.
Создайте двойным щелчком по элементу управления [ Cкачайте файл, чтобы посмотреть ссылку ] обработчик события смены элемента списка, например:
private void domainUpDown1_SelectedItemChanged(object sender, EventArgs e)
{ switch (domainUpDown1.SelectedIndex)
{
case 0:
glob.frm_child.BackColor = Color.Red;
break;
case 1:
glob.frm_child.BackColor = Color.Blue;
break;
case 2:
glob.frm_child.BackColor = Color.Green;
break;
};
}

Добавление элементов в элемент управления DomainUpDown в Windows Forms
Элементы в элемент управления Windows Forms [ Cкачайте файл, чтобы посмотреть ссылку ] можно добавлять в коде. Вызовите метод [ Cкачайте файл, чтобы посмотреть ссылку ] или [ Cкачайте файл, чтобы посмотреть ссылку ], чтобы добавить элементы в свойство [ Cкачайте файл, чтобы посмотреть ссылку ] элемента управления.
Для добавления элемента в конец списка элементов используйте метод [ Cкачайте файл, чтобы посмотреть ссылку ].
domainUpDown1.Items.Add("желтый");
Для вставки элемента в конкретное место данного списка используйте метод [ Cкачайте файл, чтобы посмотреть ссылку ].
domainUpDown1.Items.Insert(2, "голубой");

Удаление элементов из элемента управления DomainUpDown в Windows Forms
Вызвав метод [ Cкачайте файл, чтобы посмотреть ссылку ] или [ Cкачайте файл, чтобы посмотреть ссылку ], можно удалить элементы из элемента управления Windows Forms [ Cкачайте файл, чтобы посмотреть ссылку ].
Используйте метод [ Cкачайте файл, чтобы посмотреть ссылку ] для удаления элемента с заданным именем.
domainUpDown1.Items.Remove("зеленый");
Используйте метод [ Cкачайте файл, чтобы посмотреть ссылку ] для удаления элемента, расположенного в определенном месте.
domainUpDown1.Items.RemoveAt(0);

Счетчик NumericUpDown
Элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] представляет собой сочетание текстового поля и пары кнопок со стрелками для выбора значения пользователем.

Он выводит и задает отдельное числовое значение в списке вариантов фиксированных числовых значений. Пользователь может увеличивать и уменьшать число, нажимая кнопки со стрелками вверх и вниз или клавиши со стрелками ВВЕРХ и ВНИЗ, а также вводя число в области текстового поля элемента управления. При нажатии клавиши со стрелкой ВВЕРХ число увеличивается до максимума; при нажатии клавиши со стрелкой ВНИЗ число уменьшается до минимума.
Элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] используется во многих приложениях панели управления Windows.
Выводимые значения могут быть представлены текстовом поле элемента управления в различных форматах, в том числе в шестнадцатеричном. Ключевые свойства элемента управления: [ Cкачайте файл, чтобы посмотреть ссылку ], [ Cкачайте файл, чтобы посмотреть ссылку ] (значение по умолчанию – 100), [ Cкачайте файл, чтобы посмотреть ссылку ] (значение по умолчанию – 0), и [ Cкачайте файл, чтобы посмотреть ссылку ] (значение по умолчанию – 1). Свойство [ Cкачайте файл, чтобы посмотреть ссылку ] устанавливает текущее значение, выбранное элементом управления. Свойство [ Cкачайте файл, чтобы посмотреть ссылку ] задает шаг изменения значения при нажатии кнопки со стрелкой вверх или вниз. При снятии фокуса с элемента управления любые введенные данные проверяются на соответствие с минимальным и максимальным числовыми значениями. Для увеличения скорости перемещения элемента управления в зависимости от непрерывности нажатия пользователем клавиш со стрелкой вверх и вниз можно использовать свойство [ Cкачайте файл, чтобы посмотреть ссылку ].

Создание счетчика
Чтобы создать счетчик:
Выберите в Панели элементов на вкладке Все формы Windows Form элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] и добавьте его на форму.
В окне Свойства элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ] установите свойства [ Cкачайте файл, чтобы посмотреть ссылку ], [ Cкачайте файл, чтобы посмотреть ссылку ], [ Cкачайте файл, чтобы посмотреть ссылку ] и [ Cкачайте файл, чтобы посмотреть ссылку ]
Создайте двойным щелчком по элементу управления [ Cкачайте файл, чтобы посмотреть ссылку ] обработчик события смены элемента списка, например:
private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{ float n=float.Parse(numericUpDown1.Value.ToString());
glob.frm_child.Font = new Font("Sans Serif", n);
}

Определение формата элемента управления NumericUpDown в Windows Forms
Существует возможность настройки отображения значений в элементе управления Windows Forms [ Cкачайте файл, чтобы посмотреть ссылку ]. Свойство [ Cкачайте файл, чтобы посмотреть ссылку ] определяет количество знаков после десятичной запятой, по умолчанию используется нулевое значение. Свойство [ Cкачайте файл, чтобы посмотреть ссылку ] определяет, будет ли вставлен разделитель между каждыми тремя десятичными знаками; по умолчанию используется значение false. В том случае, если свойству [ Cкачайте файл, чтобы посмотреть ссылку ] присвоено значение true, этот элемент управления может отображать значения в шестнадцатеричном формате вместо десятичного; по умолчанию используется значение false.
Примечание. Даже в том случае, если значение элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ] отображается в шестнадцатеричном формате, в любых проверках для свойства [ Cкачайте файл, чтобы посмотреть ссылку ] будет проверяться его десятичное значение.

Индикатор процесса ProgressBar
Элемент управления форм [ Cкачайте файл, чтобы посмотреть ссылку ] (Windows Forms) показывает, на какой стадии находится выполняемое действие, что выражается в соответствующем числе прямоугольников, расположенных на горизонтальной шкале.

Завершение действия характеризуется заполненной шкалой. Индикаторы хода работы обычно используются, чтобы показать пользователю время, оставшееся до завершения длительного действия, например при загрузке большого файла.

Установка значения, отображаемого c помощью элемента управления ProgressBar в Windows Forms
.NET Framework позволяет отображать заданное значение в элементе управления [ Cкачайте файл, чтобы посмотреть ссылку ] несколькими способами. Выбор способа зависит от поставленной задачи или проблемы, которую требуется решить. В следующей таблице показаны доступные для выбора подходы.
Подход
Описание

Задайте значение элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ] напрямую.
Этот подход используется в задачах, когда известно точное количество используемых элементов, например при чтении записей из источника данных. Помимо этого, данный подход можно использовать и в том случае, если нужно задать значение один или два раза. Наконец, данный подход можно использовать, если требуется уменьшить значение, отображаемое индикатором выполнения.

Увеличьте отображаемое значение элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ] на фиксированную величину.
Этот способ можно использовать при отображении простого счета между минимумом и максимумом, например при отображении затраченного времени или количества файлов из известного общего количества, которые были обработаны.

Увеличьте отображаемое значение элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ] на переменную величину.
Этот способ можно использовать, когда требуется изменить отображаемое значение несколько раз на различные величины. В качестве примера выбрано количество места на жестком диске, которое расходуется при записи набора файлов на диск.

Самый прямой способ задать значение, отображаемое индикатором выполнения, задать значение свойства [ Cкачайте файл, чтобы посмотреть ссылку ]. Это можно сделать в режиме разработки, а также во время выполнения.
Чтобы задать значение элемента управления ProgressBar напрямую
Задайте значения [ Cкачайте файл, чтобы посмотреть ссылку ] и [ Cкачайте файл, чтобы посмотреть ссылку ] элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ].
В коде задайте для свойства [ Cкачайте файл, чтобы посмотреть ссылку ] элемента управления целочисленное значение, которое находится между указанными минимумом и максимумом.
Примечание. Если задать значение свойства [ Cкачайте файл, чтобы посмотреть ссылку ], которое выходит за рамки диапазона, установленного свойствами [ Cкачайте файл, чтобы посмотреть ссылку ] и [ Cкачайте файл, чтобы посмотреть ссылку ], элемент управления создает исключение [ Cкачайте файл, чтобы посмотреть ссылку ].
В следующем примере кода показано, как задать значение элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ] напрямую. С помощью кода последовательно в текстовом многострочном поле textBox1 создается список файлов из папки Мои документы. Каждый раз при записи имени очередного файла в текстовое поле обновляются индикатор выполнения и его метка. Для данного примера требуется присутствие на форме элемента управления textBox и элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ].
private void toolStripMenuItem6_Click(object sender, EventArgs e)
{ int i;
DirectoryInfo Dir = new DirectoryInfo(@"C:\Мои документы");
FileInfo[] F1 = new FileInfo[100];
F1=Dir.GetFiles();
string[] Ln = new string[100];
for (i = 0; i < F1.Count(); i++)
{
Ln[i] = F1[i].Name;
progressBar1.Value = i;
}
progressBar1.Value = 100;
textBox1.Lines = Ln;
}
При отображении хода выполнения, который увеличивается на постоянный числовой интервал, можно задать значение и затем вызвать метод, который увеличивает значение элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ] на этот числовой интервал. Это используется в таймерах и других сценариях, когда ход выполнения не измеряется в процентах от общей величины.
Чтобы увеличить отображаемое значение индикатора выполнения на фиксированную величину
Задайте значения [ Cкачайте файл, чтобы посмотреть ссылку ] и [ Cкачайте файл, чтобы посмотреть ссылку ] элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ].
В качестве значения свойства [ Cкачайте файл, чтобы посмотреть ссылку ] задайте целое число, представляющее величину, на которую следует увеличить отображаемое значение индикатора выполнения.
Вызовите метод [ Cкачайте файл, чтобы посмотреть ссылку ] для изменения отображаемого значения на величину, заданную в свойстве [ Cкачайте файл, чтобы посмотреть ссылку ].
В следующем примере кода показано, как с помощью индикатора выполнения отобразить течение времен за промежуток20секунд с шагом 2 секунды.
В этом примере требуется, чтобы форма содержала элемент управления Timer[ Cкачайте файл, чтобы посмотреть ссылку ] и элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ].
В окне Свойства для элемента управления Timer установите свойства: Interval=2000; Enabled=false (таймер не запущен).
В окне Свойства для элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ] установите свойства: Minimum=0; Maximum=10; Step=1.
Пропишите функцию изменения состояния элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ] через каждые 2 сек на 1 прямоугольник.
private void timer2_Tick(object sender, EventArgs e)
{ if (ProgressBar1.Value < ProgressBar1.Maximum)
ProgressBar1.PerformStep();
else {timer2.Enabled=false; progressBar1.Value=0;}
}
Пропишите функцию запуска таймера.
private void toolStripMenuItem6_Click(object sender, EventArgs e)
{ timer2.Enabled = true;
}
Наконец, можно увеличить значение, отображаемое индикатором выполнения, таким образом, чтобы каждое приращение являлось уникальным числом. Это используется при отслеживании серий уникальных операций, например при записи файлов различных размеров на жесткий диск или при измерении хода выполнения в процентах от общего значения.
Чтобы увеличить отображаемое значение индикатора выполнения на переменную величину
Задайте значения [ Cкачайте файл, чтобы посмотреть ссылку ] и [ Cкачайте файл, чтобы посмотреть ссылку ] элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ].
Вызовите метод [ Cкачайте файл, чтобы посмотреть ссылку ] для изменения отображаемого значения на указанную величину.
В следующем примере кода создаются три числа из диапазона [3;8] и индикатором показывается, как изменяется значение переменной S (S=0 изначально), если к ней последовательно прибавлять созданные числа.
В этом примере требуется, чтобы форма содержала элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ], элемент управления Timer и элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ].
Объявите глобальные переменные:
public static class loc
{ public static Color cl;
public static int[] y=new int[3];
public static int k,S=0;
}
Пропишите функцию изменения состояния элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ]:
private void timer3_Tick(object sender, EventArgs e)
{ if (loc.k < 3)
{ if (loc.k >0) label4.Text = label4.Text + "+";
label4.Text = label4.Text + loc.y[loc.k].ToString();

progressBar2.Increment(loc.y[loc.k]);
loc.k++;
}
else
{ timer3.Enabled = false;
label4.Text = label4.Text + "="+loc.S.ToString();
};
}.
Пропишите функцию запуска таймера.
private void toolStripMenuItem6_Click(object sender, EventArgs e)
{ loc.k = 0;
timer3.Enabled = true;
Random x = new Random();
for (i = 0; i < 3; i++)
{ loc.y[i] = x.Next(6) + 3;
loc.S = loc.S + loc.y[i];
};
progressBar2.Maximum = loc.S; label4.Text = "S=";
}
Примечание. Представленные выше варианты кода не являются единственными.
Пример. Создадим репетитор по работе с клавиатурой.

При нажатии кнопки «Новый текст» в поле Текст должен появляться текст из нескольких слов и запускаться таймер. По истечении времени, указанном в поле NumericUpDown, производится подсчет верных символов, введенным пользователем в текстовое поле.

Число слов должно генерироваться по принципу: 1-3 слова на каждые 5 сек.
Число символов в слове должно генерироваться по принципу: 3-6 символа на 1 слово.
По истечении времени текстовое поле блокируется от ввода данных.
Решение.
Создадим ряд вспомогательных переменных:
namespace Metodichka
{ public partial class Form11 : Form
{
// время, индикатор процесса, время процесса
int t = 5,ind=0,tp=0;
// начальное время процесса
DateTime t0;
// датчик случайных чисел
Random r = new Random();
// число слов
int n = 2;
}
}
Создадим функцию генерирования слов в зависимости от установленного времени:
private string word(object sender, EventArgs e)
{ string s="";
// d – длина слова, cod – код символа
int i, j, cod, d;
for (i = 0; i <= n; i++)
{ d=r.Next(4,7);
for (j = 0; j < d; j++)
{ cod = r.Next(1072, 1103);
s = s + Char.ConvertFromUtf32(cod);
}
s = s + " ";
}
return s;
}
В обработчике загрузке формы пропишем начальные данные:
private void Form11_Load(object sender, EventArgs e)
{
// Системное время, отображаемое в строке состояния
toolStripStatusLabel1.Text = "Время: " + DateTime.Now.ToLongTimeString();
}
В обработчике изменения времени в счетчике NumericUpDown пропишем сохранение значения в переменной длины процесса t:
private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{ t = Convert.ToInt16(numericUpDown1.Value);
}
Создадим функцию, осуществляющую проверку ответа, вводимого пользователем:
private void proverka(object sender, EventArgs e)
{
// k – число верных символов, min – длина проверяемой строки
int k = 0,min=0, i;
if (label2.Text.Length < textBox1.Text.Length) min = label2.Text.Length;
else min = textBox1.Text.Length;
for (i = 0; i < min; i++)
if (label2.Text[i] == textBox1.Text[i]) k++;
int pr=k*100/label2.Text.Length;
label4.Text = "Верных символов: " + k.ToString() + " - " + pr.ToString()+"%";
}
В обработчике нажатия кнопки «Новый текст» пропишем начальные параметры процесса:
private void toolStripButton1_Click(object sender, EventArgs e)
{
// фиксируем время начала процесса
t0 = Convert.ToDateTime(DateTime.Now);
//рассчитываем число слов
n = t / 5 * 2;
// очищаем текстовое поле
textBox1.Text = "";
// генерируем текст
label2.Text = word(sender, e);
//переводим курсор в текстовое поле
textBox1.Focus();
//включаем индикатор процесса
ind = 1;
//делаем доступным для ввода текстовое поле
textBox1.Enabled = true;
//устанавливаем индикатор процесса в строке состояния в начальное положение
toolStripProgressBar1.Value = 0;
//задаем максимальное значение индикатора процесса в строке состояния
toolStripProgressBar1.Maximum = t;
// можно задать единое количество шагов
// toolStripProgressBar1.Step = t / 5;
}
В обработчике работы таймера пропишем код:
private void timer1_Tick(object sender, EventArgs e)
{ //если процесс запущен, то меняем параметры процесса
if (ind==1)
{
//фиксируем текущее значение времени процесса
tp=(Convert.ToDateTime(DateTime.Now) - t0).Seconds;
//отображаем значение времени процесса в строке состояния
toolStripStatusLabel2.Text = "Процесс: "+tp.ToString();
//изменяем показатель индикатора процесса в строке состояния
toolStripProgressBar1.PerformStep();
}
// в строке состояния отображаем системное время
toolStripStatusLabel1.Text = "Время: " + DateTime.Now.ToLongTimeString();
//если время процесса стало равным заданному в счетчике, то останавливаем процесс
if (tp >= t)
{//останавливаем процесс
ind = 0;
//делаем недоступным для ввода текстовое поле
textBox1.Enabled = false;
//запускаем функцию проверки результата
proverka(sender, e);
//обнуляем текущее время процесса, чтобы повторно не заходить в данный блок
tp = 0;
}}

Текстовый редактор RichTextBox
Элемент управления Windows Forms [ Cкачайте файл, чтобы посмотреть ссылку ] используется для отображения, ввода и изменения текста с форматированием. Элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] выполняет те же функции, что и элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ], но помимо этого он позволяет отображать шрифты, цвета и ссылки, загружать текст и вложенные изображения из файлов, а также искать заданные знаки. Элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] обычно используется для предоставления возможностей изменения и отображения текста, схожих с возможностями текстовых редакторов, таких как Microsoft Word. Элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ], как и [ Cкачайте файл, чтобы посмотреть ссылку ], позволяет отображать полосы прокрутки, однако в отличие от [ Cкачайте файл, чтобы посмотреть ссылку ], он по умолчанию отображает и горизонтальную, и вертикальную полосы прокрутки в зависимости от необходимости, а также поддерживает дополнительные параметры их настройки.
Как и для элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ], отображаемый текст в элементе управления [ Cкачайте файл, чтобы посмотреть ссылку ] задается свойством [ Cкачайте файл, чтобы посмотреть ссылку ].
Для управления файлами используются методы [ Cкачайте файл, чтобы посмотреть ссылку ] и [ Cкачайте файл, чтобы посмотреть ссылку ], отображающие и сохраняющие множество форматов файлов, в том числе обычный текст, обычный текст Юникод и форматируемый текст (RTF).
С помощью метода [ Cкачайте файл, чтобы посмотреть ссылку ] выполняется поиск текстовых строк или определенных символов.
Элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] можно также использовать для создания веб-ссылок; для этого надо задать для свойства [ Cкачайте файл, чтобы посмотреть ссылку ] значение true и создать код для обработки события [ Cкачайте файл, чтобы посмотреть ссылку ].
Можно запретить пользователю управлять частью текста или всем текстом в элементе управления, задав для свойства [ Cкачайте файл, чтобы посмотреть ссылку ] значение true.
Большую часть операций редактирования в элементе управления [ Cкачайте файл, чтобы посмотреть ссылку ] можно отменить и восстановить с помощью вызова методов [ Cкачайте файл, чтобы посмотреть ссылку ] и [ Cкачайте файл, чтобы посмотреть ссылку ]. Метод [ Cкачайте файл, чтобы посмотреть ссылку ] позволяет определить, можно ли заново применить выполненное последним и отмененное действие, к элементу управления.

Задание отступов абзаца
Чтобы задать отступы слева, справа, до и после абзаца выполните следующие действия:
Присвойте свойству [ Cкачайте файл, чтобы посмотреть ссылку ] целое значение, равное требуемому расстоянию в точках между левым краем элемента управления и левым краем текста.
Присвойте свойству [ Cкачайте файл, чтобы посмотреть ссылку ] целое значение, равное требуемому расстоянию в точках между началом первой строки абзаца и началом остальных строк того же абзаца. Значение свойства [ Cкачайте файл, чтобы посмотреть ссылку ] применяется только к строкам абзаца, следующим за первой строкой.
Присвойте свойству [ Cкачайте файл, чтобы посмотреть ссылку ] целое значение, равное требуемому расстоянию в точках между правым краем элемента управления и правым краем текста.
Все эти свойства влияют на абзацы, в которых выделены какие-либо фрагменты, а также на текст, который будет вводиться после текущей позиции курсора. Например, если пользователь выделяет слово в абзаце и затем изменяет параметры отступа, то новые параметры будут применены ко всему абзацу с выделенным словом, а также ко всем абзацам, которые будут введены после этого абзаца.
Пример. Создадим приложение, в котором по щелчку на ссылке Применить форматирование происходит форматирование выделенного фрагмента с параметрами, прописанными в коде.

Код:
private void label2_Click(object sender, EventArgs e)
{ richTextBox1.SelectionIndent = 8;
richTextBox1.SelectionHangingIndent = 3;
richTextBox1.SelectionRightIndent = 12;
}
Сохранение файлов с помощью элемента управления RichTextBox
Элемент управления Windows Forms [ Cкачайте файл, чтобы посмотреть ссылку ] позволяет записывать отображаемые в нем данные в одном из следующих форматов:
Обычный текст
Текст в Юникоде
Формат RTF (Rich Text Format)
Формат RTF с пропусками на месте объектов OLE
Обычный текст с текстовым представлением объектов OLE
Чтобы сохранить файл:
Определите путь к файлу, в который будет производиться запись.
На практике для этого обычно используется компонент [ Cкачайте файл, чтобы посмотреть ссылку ].
Вызовите метод [ Cкачайте файл, чтобы посмотреть ссылку ] элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ], указав имя файла для сохранения и, если необходимо, его тип. Если метод вызван только с одним аргументом именем файла, то файл будет сохранен в формате RTF. Чтобы определить другой тип файла, вызовите метод, использовав в качестве второго аргумента одно из значений перечисления [ Cкачайте файл, чтобы посмотреть ссылку ].
В примере, представленном ниже, подразумевается, что элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] уже добавлен в форму.
private void label3_Click(object sender, EventArgs e)
{ if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{ richTextBox1.SaveFile(saveFileDialog1.FileName,
RichTextBoxStreamType.RichNoOleObjs);
}
}
Примечание. Открытие файла осуществляется аналогично.
Пример.
private void label1_Click(object sender, EventArgs e)
{ if (openFileDialog1.ShowDialog() == DialogResult.OK)
{ richTextBox1.LoadFile(openFileDialog1.FileName,
RichTextBoxStreamType.RichText);
}
}

Отслеживание изменения атрибутов форматирования текста в элементе управления RichTextBox
Как правило, элемент управления Windows Forms [ Cкачайте файл, чтобы посмотреть ссылку ] используется для форматирования текста с применением таких атрибутов, как параметры шрифта или стиль абзаца. В приложениях часто требуется отслеживать изменения формата текста, чтобы учитывать их при отображении панели инструментов, как это делается во многих текстовых редакторах.
Чтобы реагировать на изменения атрибутов форматирования, выполните следующие действия:
Добавьте в обработчик событий [ Cкачайте файл, чтобы посмотреть ссылку ] код, выполняющий определенные действия в зависимости от значения атрибута. В приведенном ниже примере вид кнопки панели инструментов изменяется в зависимости от значения свойства [ Cкачайте файл, чтобы посмотреть ссылку ]. Если текст написан в окне [ Cкачайте файл, чтобы посмотреть ссылку ] курсивом, то кнопка toolStripButton1 будет нажата, иначе отжата. Кнопка панели инструментов изменится только после перемещения курсора внутри элемента управления.
13 SHAPE \* MERGEFORMAT 1415
В этом примере предполагается наличие формы с элементом управления [ Cкачайте файл, чтобы посмотреть ссылку ] и элементом управления [ Cкачайте файл, чтобы посмотреть ссылку ]Strip, содержащим кнопку.
private void richTextBox1_SelectionChanged(object sender, EventArgs e)
{ if (richTextBox1.SelectionFont.Style == FontStyle.Italic)
{ toolStripButton1.Checked = true;
}
else
{ toolStripButton1.Checked = false;
}
}

Создание событий форматирования текста
Большинство современных текстовых редакторов содержат команды меню и элементы панели инструментов, предназначенные для форматирования текста.
Чтобы создать событие форматирования текста выполните следующие действия:
На форме расположите элемент управления, при выборе которого должно срабатывать изменение внешнего вида текста документа. Это могут быть пункт меню, кнопка панели инструментов, обычная кнопка, ссылка и другие элементы управления.
Создайте обработчик события выбора созданного элемента управления.
В теле созданного обработчика события пропишите код, аналогичный следующему:
private void richTextBox1_SelectionChanged(object sender, EventArgs e)
{ if (richTextBox1.SelectionFont.Style == FontStyle.Italic)
{ toolStripButton1.Checked = true;
}
else
{ toolStripButton1.Checked = false;
}
}

private void toolStripButton2_Click(object sender, EventArgs e)
{ //Cчитываем текущие параметры
FontFamily fm = richTextBox1.SelectionFont.FontFamily;
GraphicsUnit fp = richTextBox1.SelectionFont.Unit;
float fs = richTextBox1.SelectionFont.Size;
//Если курсив, то убираем
if (toolStripButton2.Checked)
richTextBox1.SelectionFont = new Font(fm, fs, FontStyle.Regular, fp);
//Если нет курсива, то добавляем
else
richTextBox1.SelectionFont = new Font(fm, fs, FontStyle.Italic, fp);
}

Отображение полос прокрутки в элементе управления RichTextBox
По умолчанию в элементе управления Windows Forms [ Cкачайте файл, чтобы посмотреть ссылку ] в случае необходимости отображаются горизонтальная и вертикальная полосы прокрутки. Существует семь возможных значений свойства [ Cкачайте файл, чтобы посмотреть ссылку ] элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ], которые описаны в расположенной ниже таблице.
Чтобы отобразить полосы прокрутки в элементе управления RichTextBox
Установите для свойства [ Cкачайте файл, чтобы посмотреть ссылку ] значение true. Если свойство [ Cкачайте файл, чтобы посмотреть ссылку ] имеет значение false, то полосы прокрутки, включая горизонтальную, отображаться не будут.
Присвойте свойству [ Cкачайте файл, чтобы посмотреть ссылку ] соответствующее значение перечисления [ Cкачайте файл, чтобы посмотреть ссылку ].
Присвойте соответствующее значение свойству [ Cкачайте файл, чтобы посмотреть ссылку ].

Вкладки TabControl
Элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] (Windows Forms) используется для отображения нескольких вкладок, аналогичных разделителям в записной книжке или меткам в наборе папок картотечного блока.

Вкладки могут содержать рисунки и другие элементы управления. Элемент управления вкладок можно использовать для создания многостраничных диалоговых окон, наподобие тех, что отображаются во многих компонентах интерфейса операционной системы Windows, например, в свойствах экрана панели управления. Кроме того, [ Cкачайте файл, чтобы посмотреть ссылку ] можно использовать для создания страниц свойств, служащих для группировки связанных свойств.
Наиболее важным свойством элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ] является свойство [ Cкачайте файл, чтобы посмотреть ссылку ], содержащее отдельные вкладки. Каждая вкладка представляет собой объект [ Cкачайте файл, чтобы посмотреть ссылку ]. Если перейти на вкладку, вызывается событие [ Cкачайте файл, чтобы посмотреть ссылку ] для соответствующего объекта [ Cкачайте файл, чтобы посмотреть ссылку ].
Создание вкладок
Чтобы создать несколько вкладок выполните следующие действия:
Выберите в Панели элементов на вкладке Контейнеры элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] и добавьте его на форму. В результате будет создан элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] с двумя вкладками [ Cкачайте файл, чтобы посмотреть ссылку ]1 и [ Cкачайте файл, чтобы посмотреть ссылку ]2.
Выделите одну из вкладок. Перейдите в окно Свойства и измените наименование вкладки в свойстве Text.
Изменение внешнего вида элемента управления TabControl
Внешний вид вкладок в формах Windows Forms может быть изменен при помощи свойств элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ] и объектов [ Cкачайте файл, чтобы посмотреть ссылку ], представляющих отдельные вкладки в составе элемента управления. Настройка этих свойств позволяет отображать рисунки на вкладках, располагать вкладки вертикально, размещать их в несколько рядов, а также включать и выключать вкладки программными средствами.
Чтобы отобразить значок в области надписей на вкладке
Добавьте элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] в форму.
Добавьте изображение в список изображений.
Задайте для свойства [ Cкачайте файл, чтобы посмотреть ссылку ] элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ] значение [ Cкачайте файл, чтобы посмотреть ссылку ].
Присвойте свойству [ Cкачайте файл, чтобы посмотреть ссылку ] объекта [ Cкачайте файл, чтобы посмотреть ссылку ] значение индекса соответствующего изображения из списка.
В результате рядом с именами вкладок появятся иконки:

Чтобы добавить новую вкладку:
Откройте панель Задачи, щелкнув по символу треугольника в верхнем правом углу элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ].
Выберите команду Добавить вкладку.

Чтобы создать несколько рядов вкладок:
Добавьте требуемое количество страниц вкладок.
Присвойте свойству [ Cкачайте файл, чтобы посмотреть ссылку ] элемента [ Cкачайте файл, чтобы посмотреть ссылку ] значение true.
Если вкладки еще не отображены в несколько рядов, уменьшите значение свойства [ Cкачайте файл, чтобы посмотреть ссылку ] элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ] так, чтобы оно стало меньше общей ширины всех вкладок.

Чтобы расположить вкладки вдоль края элемента управления
Присвойте свойству [ Cкачайте файл, чтобы посмотреть ссылку ] элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ] значение [ Cкачайте файл, чтобы посмотреть ссылку ] или [ Cкачайте файл, чтобы посмотреть ссылку ].
Чтобы включить или выключить вкладку программными средствами
Присвойте свойству [ Cкачайте файл, чтобы посмотреть ссылку ] объекта [ Cкачайте файл, чтобы посмотреть ссылку ] значение true или false.
tabPage1.Enabled = false;
Чтобы отобразить вкладки в виде кнопок
Присвойте свойству [ Cкачайте файл, чтобы посмотреть ссылку ] элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ] значение [ Cкачайте файл, чтобы посмотреть ссылку ] или [ Cкачайте файл, чтобы посмотреть ссылку ].
В некоторых ситуациях бывает необходимо ограничить доступ к данным, доступным в приложении Windows Forms. Например, при отображении данных на вкладках может возникнуть необходимость запретить гостевым пользователям и пользователям нижнего уровня доступ к содержимому одной из вкладок.
Чтобы отключить страницы вкладок программными средствами
Напишите код для обработки события [ Cкачайте файл, чтобы посмотреть ссылку ] элемента управления вкладок. Данное событие происходит при переключении пользователя на очередную вкладку.
Проверьте учетные данные пользователя. Прежде чем разрешить пользователю просматривать вкладку, можно, в зависимости от предоставленных сведений, проверить имя пользователя, с которым он вошел в систему, или другие учетные данные.
Если учетные данные соответствуют требованиям, отобразите нужную вкладку. Если учетные данные не соответствуют требованиям, отобразите диалоговое окно или другой элемент пользовательского интерфейса, содержащий сообщение об отсутствии требуемых прав доступа, и задайте страницам вкладок значение свойства [ Cкачайте файл, чтобы посмотреть ссылку ][ Cкачайте файл, чтобы посмотреть ссылку ] равным false.
Примечание. При реализации этой функции в приложении можно выполнять проверку учетных данных в обработчике события [ Cкачайте файл, чтобы посмотреть ссылку ] формы. Это позволит отключать вкладку до отображения интерфейса пользователя, что более предпочтительно с точки зрения стиля программирования. Используемые ниже методы (проверка учетных данных и отключение вкладки в обработчике события [ Cкачайте файл, чтобы посмотреть ссылку ]) носят чисто иллюстративный характер.
Если страниц вкладок больше двух, можно отобразить вкладку, отличающуюся от первоначальной.
В приведенном ниже примере вместо проверки учетных данных используется элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ], поскольку условия доступа к вкладке будут изменяться в зависимости от приложения. Если при распознавании события [ Cкачайте файл, чтобы посмотреть ссылку ] проверка учетных данных прошла успешно (т. е. флажок установлен) и выбрана вкладка TabPage2 (в данном примере вкладка с конфиденциальными данными), то вкладка TabPage2 отображается. В противном случае отображается вкладка TabPage3 и открывается окно с сообщением об отсутствии необходимых прав доступа. Нижеследующий код предполагает наличие формы, в которой имеется элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] и элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] с тремя страницами вкладок.
private void tabControl1_SelectedIndexChanged(object sender, System.EventArgs e)
{ if (([ Cкачайте файл, чтобы посмотреть ссылку ]1.Checked = true) & (tabControl1.SelectedTab == tabPage2))
{ tabControl1.SelectedTab = tabPage2;
}
else if ((CredentialCheck.Checked = false) & (tabControl1.SelectedTab == tabPage2))
{ MessageBox.Show("Unable to load tab. You have insufficient access privileges.");
tabControl1.SelectedTab = tabPage3; }}

Добавление элемента управления на вкладку программными средствами
Элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] конструктора Windows Forms можно использовать для упорядочения отображения других элементов управления. В следующей процедуре показано, как отображать рисунок в основной части вкладки.
Чтобы добавить элемент управления программными средствами, выполните следующие действия: используйте метод [ Cкачайте файл, чтобы посмотреть ссылку ] коллекции, возвращаемой свойством [ Cкачайте файл, чтобы посмотреть ссылку ] элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ]:
tabPage1.Controls.Add(new Button());
либо
tabPage1.get_Controls().Add(new Button());
Добавление и удаление вкладок с помощью элемента управления TabControl в Windows Forms программными средствами
По умолчанию элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] содержит два элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ]. Доступ к этим вкладкам возможен посредством свойства [ Cкачайте файл, чтобы посмотреть ссылку ].
Чтобы добавить вкладки программными средствами используйте метод [ Cкачайте файл, чтобы посмотреть ссылку ] свойства [ Cкачайте файл, чтобы посмотреть ссылку ].
string title = "TabPage " + (tabControl1.TabCount + 1).ToString();
TabPage myTabPage = new TabPage(title);
tabControl1.TabPages.Add(myTabPage);
Удаление вкладки программными средствами
Чтобы удалить выбранные вкладки используйте:
метод [ Cкачайте файл, чтобы посмотреть ссылку ] свойства [ Cкачайте файл, чтобы посмотреть ссылку ] для удаления одной заданной вкладки.
либо
метод [ Cкачайте файл, чтобы посмотреть ссылку ] свойства [ Cкачайте файл, чтобы посмотреть ссылку ] для удаления всех вкладок.
tabControl1.TabPages.Remove(tabControl1.SelectedTab);
tabControl1.TabPages.Clear();

Календарь MonthCalendar
Элемент управления Windows Forms MonthCalendar предоставляет пользователям понятный графический интерфейс для просмотра и задания сведений о дате.

Этот элемент управления выводит сетку, содержащую пронумерованные дни месяца, разбитые на столбцы по дням недели. Перейти к другому месяцу можно, нажав кнопку со стрелкой справа или слева от заголовка месяца. В отличие от аналогичного элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ], данный элемент управления позволяет выделить диапазон дат; однако элемент управления [ Cкачайте файл, чтобы посмотреть ссылку ] может использоваться для задания не только даты, но и времени.
Внешний вид элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ] можно настроить множеством способов. По умолчанию текущая дата обводится кружком, а также отмечается в нижней части сетки. Это используемое по умолчанию поведение можно изменить, присваивая свойствам [ Cкачайте файл, чтобы посмотреть ссылку ] и [ Cкачайте файл, чтобы посмотреть ссылку ] значение false. В календарь можно также добавить номера недель, задав для свойства [ Cкачайте файл, чтобы посмотреть ссылку ] значение true. С помощью свойства [ Cкачайте файл, чтобы посмотреть ссылку ] можно задать отображение нескольких месяцев по вертикали или по горизонтали. По умолчанию в качестве первого дня недели отображается воскресенье, но с помощью свойства [ Cкачайте файл, чтобы посмотреть ссылку ] любой день недели можно назначить первым.
Можно также задать единовременное, ежегодное или ежемесячное отображение полужирным шрифтом определенных дат, добавив объекты [ Cкачайте файл, чтобы посмотреть ссылку ] в свойства [ Cкачайте файл, чтобы посмотреть ссылку ], [ Cкачайте файл, чтобы посмотреть ссылку ] и [ Cкачайте файл, чтобы посмотреть ссылку ].
Ключевым свойством элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ] является свойство [ Cкачайте файл, чтобы посмотреть ссылку ], представляющее собой диапазон дат, выделенных в элементе управления. Значение [ Cкачайте файл, чтобы посмотреть ссылку ] не может превышать максимального количества дней, которые можно выделить, заданного в свойстве [ Cкачайте файл, чтобы посмотреть ссылку ]. Самая ранняя и самая поздняя даты, которые может выбрать пользователь, определяются свойствами [ Cкачайте файл, чтобы посмотреть ссылку ] и [ Cкачайте файл, чтобы посмотреть ссылку ].
Изменение внешнего вида элемента управления MonthCalendar
Предусмотрено множество возможностей настройки внешнего вида элемента управления Windows Forms [ Cкачайте файл, чтобы посмотреть ссылку ]. Например, предоставляется возможность выбора цветовой схемы, а также отображения или скрытия номеров недель или текущей даты.
Чтобы изменить цветовую схему календаря установите свойства [ Cкачайте файл, чтобы посмотреть ссылку ], [ Cкачайте файл, чтобы посмотреть ссылку ] и [ Cкачайте файл, чтобы посмотреть ссылку ]. Свойство [ Cкачайте файл, чтобы посмотреть ссылку ] также определяет цвет шрифта для дней недели. Свойство [ Cкачайте файл, чтобы посмотреть ссылку ] определяет цвет дат, предшествующих и следующих за отображаемым месяцем или месяцами.
monthCalendar1.TitleBackColor = System.Drawing.Color.Blue;
monthCalendar1.TrailingForeColor = System.Drawing.Color.Red;
monthCalendar1.TitleForeColor = System.Drawing.Color.Yellow;
Чтобы отобразить текущую дату внизу элемента управления установите для свойства [ Cкачайте файл, чтобы посмотреть ссылку ] значение true. В приведенном ниже примере переключение между отображением и скрытием текущей даты происходит при выполнении двойного щелчка на форме.
private void Form1_DoubleClick(object sender, System.EventArgs e)
{ monthCalendar1.ShowToday = !monthCalendar1.ShowToday;}
Отображение более чем одного месяца в элементе управления MonthCalendar
Элемент управления Windows Forms [ Cкачайте файл, чтобы посмотреть ссылку ] позволяет отображать на экране одновременно до 12 месяцев. По умолчанию в этом элементе управления отображается только один месяц, однако имеется возможность указать количество месяцев, которые будут отображаться на экране, и их размещение в данном элементе управления.
Чтобы отобразить несколько месяцев задайте для свойства [ Cкачайте файл, чтобы посмотреть ссылку ] значение, равное числу месяцев, отображаемых по горизонтали и вертикали.
monthCalendar1.CalendarDimensions = new System.Drawing.Size (3,2);
Отображение определенных дней полужирным шрифтом в элементе управления MonthCalendar
Элемент управления Windows Forms [ Cкачайте файл, чтобы посмотреть ссылку ] позволяет отображать дни полужирным шрифтом, причем или в качестве отдельных дат, или на периодической основе. Это можно сделать, чтобы особо выделить определенные даты, например праздники и выходные.
Эта возможность реализуется с помощью трех свойств. Свойство [ Cкачайте файл, чтобы посмотреть ссылку ] содержит отдельные даты. Свойство [ Cкачайте файл, чтобы посмотреть ссылку ] включает даты, которые отображаются полужирным шрифтом каждый год. Свойство [ Cкачайте файл, чтобы посмотреть ссылку ] включает даты, которые отображаются полужирным шрифтом каждый месяц. Каждое из этих свойств содержит массив объектов [ Cкачайте файл, чтобы посмотреть ссылку ]. Чтобы добавить даты в один из этих списков или удалить их оттуда, необходимо добавить или удалить объект [ Cкачайте файл, чтобы посмотреть ссылку ].
Чтобы отобразить даты полужирным шрифтом
Создайте объекты [ Cкачайте файл, чтобы посмотреть ссылку ].
DateTime t1 = new DateTime(2001, 6, 10);
DateTime t2 = new DateTime(2001, 6, 17);
Выделите отдельную дату полужирным шрифтом, вызвав метод [ Cкачайте файл, чтобы посмотреть ссылку ], [ Cкачайте файл, чтобы посмотреть ссылку ] или [ Cкачайте файл, чтобы посмотреть ссылку ] элемента управления [ Cкачайте файл, чтобы посмотреть ссылку ].
monthCalendar1.AddBoldedDate(t1);
monthCalendar1.AddBoldedDate(t2);
либо
Выделите полужирным шрифтом сразу несколько дат, создав массив объектов [ Cкачайте файл, чтобы посмотреть ссылку ] и присвоив его одному из этих свойств.
DateTime[] dt = {t1, t2};
monthCalendar1.BoldedDates = dt;
Чтобы отобразить даты обычным шрифтом
Отмените выделение полужирным шрифтом отдельной даты и отобразите ее обычным шрифтом, вызвав метод [ Cкачайте файл, чтобы посмотреть ссылку ], [ Cкачайте файл, чтобы посмотреть ссылку ] или [ Cкачайте файл, чтобы посмотреть ссылку ].
monthCalendar1.RemoveBoldedDate(t1);
monthCalendar1.RemoveBoldedDate(t2);
либо
Удалите все выделенные полужирным шрифтом даты из одного из трех списков, вызвав метод [ Cкачайте файл, чтобы посмотреть ссылку ], [ Cкачайте файл, чтобы посмотреть ссылку ] или [ Cкачайте файл, чтобы посмотреть ссылку ].
monthCalendar1.RemoveAllBoldedDates();
Обновите внешний вид шрифта, вызвав метод [ Cкачайте файл, чтобы посмотреть ссылку ].
monthCalendar1.UpdateBoldedDates();

Браузер WebBrowser
В системе С# существует немало компонентов, предназначенных для работы с Интернетом, WWW и сетями TCP/IP.
Чтобы открыть в приложении страницу HTML:
Выберите в Панели элементов на вкладке Все формы Windows Forms элемент управления WebBrowser и разместите его на форме.
Создайте функцию обработки события отображения HTML-страницы, в которой пропишите с помощью метода Navigate путь к HTML-страницы.
Пример.
private void Form6_Shown(object sender, EventArgs e)
{
string FilePath = Path.Combine(Environment.CurrentDirectory, "xml1.xml");
webBrowser1.Navigate(FilePath);
}

Диалоговое окно MessageBox
Отобразить стандартное диалоговое окно с несколькими кнопками можно с помощью метода Show объекта MessageBox из библиотеки System.Windows.Forms.
Метод Show возвращает в качестве результат имя нажатой кнопки. Тип результата DialogResult.
Отображение диалогового окна с одной кнопкой по умолчанию «ОК»
1 способ

Чтобы отобразить простейшее диалоговое окно с одной кнопкой и текстом сообщения необходимо прописать код:
{MessageBox.Show("Здесь пишется текст сообщения");
Действия, выполняемые после нажатия клавиши ОК
}
2 способ


Чтобы отобразить простейшее диалоговое окно с одной кнопкой, текстом сообщения и заголовком необходимо прописать код:
{MessageBox.Show("Здесь пишется текст сообщения","Заголовок" );
Действия, выполняемые после нажатия клавиши ОК
}

Отображение диалогового окна с несколькими кнопками
1 способ

Чтобы отобразить диалоговое окно с несколькими кнопками необходимо прописать код:
{DialogResult Переменная = MessageBox.Show("Здесь пишется текст сообщения", "Заголовок",MessageBoxButtons.список_кнопки);
if (Переменная == DialogResult.кнопка1
{Действия, выполняемые при выборе первой кнопки из списка;
}
else
{Действия, выполняемые при выборе второй кнопки из списка;
};}
где: список_кнопок выбираются с помощью подсказчика (Ctrl+Alt+Space) из предложенного списка.
Примечание. Если кнопок в списке больше двух, то их можно обработать с помощью отдельных конструкций if или конструкции switch.
Примечание. Имя кнопки после ее выбора в диалоговом окне заносится в Переменную, которая имеет тип DialogResult.
2 способ
В окно, представленное в 1-м способе, можно добавить иконку:

Чтобы отобразить диалоговое окно с несколькими кнопками необходимо прописать код:
{DialogResult Переменная = MessageBox.Show("Здесь пишется текст сообщения", "Заголовок",MessageBoxButtons.список_кнопки, MessageBoxIcon.Иконка);
if (Переменная == DialogResult.кнопка1
{ Действия, выполняемые при выборе первой кнопки из списка;
}
else
{ Действия, выполняемые при выборе второй кнопки из списка;
};}
где: иконка выбираются с помощью подсказчика (Ctrl+Alt+Space) из предложенного списка.
Примечание. Всего в С# существует 21 способ отображения диалогового окна MessageBox.
Пример. Создадим проект для вычисления корня квадратного из целого числа, вводимого пользователем в текстовое поле:

Если в поле введен текст, то должно выводиться сообщение об ошибке:



При нажатии кнопки Повтор текст в поле выделяется, при нажатии кнопки Отмена – текст стирается:



Если в поле введено отрицательное число, то после предупреждения число будет заменено на положительное и найдено значение корня:



Если число введено целое положительное, то будет вычислено значение корня.
Для решения этой задачи необходимо в обработчике события нажатия кнопки прописать код:
private void button1_Click(object sender, EventArgs e)
{ int x=0, ind=0;
try { x = Convert.ToInt16(textBox1.Text); }
catch (FormatException er)
{ ind = 1;
DialogResult rez = MessageBox.Show("Необходимо ввести число!", "Ошибка: \"Текст\"", MessageBoxButtons.RetryCancel, MessageBoxIcon.Error);
if (rez == DialogResult.Retry)
{ textBox1.Focus();
textBox1.SelectAll();
}
else textBox1.Text = "";
};

if (ind == 0)
if (x < 0)
{ MessageBox.Show("Отрицательное число!", "Внимание", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
x = -x;
textBox1.Text = x.ToString();
}
{ label2.Text = "= "+Math.Sqrt(x).ToString();
} }

Создание графических объектов
Методы класса Graphics
Иногда для отображения некоторого процесса недостаточно загрузки графических элементов из файла, необходимо по определенным параметрам создать график функции или геометрическую фигуру.
Рисовать графики функций и геометрические объекты можно как непосредственно на форме, так и в таких элементах управления, как: Image, Panel, TabPage и других.
Все геометрические объекты рисуются с помощью методов и свойств класса Graphics. На элементе управления сначала необходимо создать полотно, на котором будет изображен рисунок.
Чтобы создать полотно для рисунка пропишите в коде команду:
Graphics имя_полотна =форма.элемент_управления.CreateGraphics();
где элемент_управления – это элемент, на котором будет создано полотно для рисунка.
Пример.
Graphics g = this.pictureBox1.CreateGraphics();
Примечание. Элемент_управления может отсутствовать, полотно можно располагать непосредственно на форме.

Выбор инструментов рисования
Перо
Методам класса Graphics, рисующим контур фигуры, необходимо передать перо - объект класса Pen, с помощью которого все фигуры будут прорисовываться на полотне. В конструкторе класса Pen можно задать цвет пера и его толщину (чаще говорят "ширину пера"). Цвет задается объектом класса (структурой) Color.
Чтобы создать перо с определенными характеристиками пропишите в коде команду:
Pen имя_пера = new Pen(Color.цвет, толщина);
Пример:
Pen p = new Pen(Color.Red, 1);

Кисть
Чтобы закрасить созданный графический объект воспользуйтесь средствами класса Brush. Этот класс, задающий кисти, устроен более сложно, чем класс Pen. Класс Brush является абстрактным классом, так что создавать кисти этого класса нельзя, но можно создавать кисти классов-потомков Brush. Таких классов пять:
SolidBrush – кисти для сплошной закраски области заданным цветом;
TextureBrush – кисти для закраски области заданной картинкой (image);
HatchBrush – кисти для закраски области предопределенным узором;
LinearGradientBrush – кисти для сплошной закраски с переходом от одного цвета к другому, где изменение оттенков задается линейным градиентом;
PathGradientBrush – кисти для сплошной закраски с переходом от одного цвета к другому, где изменение оттенков задается более сложным путем.
Первые два класса кистей находятся в пространстве имен System.Drawing, остальные – в System.Drawing.Drawing2D.

Чтобы создать кисть с определенными характеристиками пропишите в коде команду:
Brush имя_кисти = new тип_кисти (параметры_кисти);
Пример:
Brush b = new SolidBrush(Color.Maroon);
Классификация методов по рисуемым с их помощью объектам
Для [ Cкачайте файл, чтобы посмотреть ссылку ] наиболее важны три группы методов.
К первой относится перегруженный метод DrawString, позволяющий выводить тексты в графическом режиме.
Вторую группу составляют методы Draw : DrawEllipse, [ Cкачайте файл, чтобы посмотреть ссылку ], DrawArc и другие, позволяющие цветным пером (объектом класса Pen) рисовать геометрические фигуры: линии, различные кривые, прямоугольники, многоугольники, эллипсы и прочее.
К третьей группе [ Cкачайте файл, чтобы посмотреть ссылку ] методы Fill: FillEllipse, FillPie, [ Cкачайте файл, чтобы посмотреть ссылку ] и другие, позволяющие нарисовать фигуру цветным пером и закрасить ее кистью (объектом класса, производного от Brush).

Примеры построения графических объектов
Кривая Безье
Пусть в проекте создана на форме панель Panel1. На этой панели нарисуем пучок кривых Безье, исходящих из единого центра. Центр пучка совпадает с точкой соприкосновения курсора мыши с панелью. При нажатии левой кнопки мыши пучок появляется. При движении мыши с нажатой левой кнопкой центр пучка перемещается за мышью и кривые перерисовываются. Как только кнопка мыши отпускается – рисунок фиксируется. Двойным щелчком мыши полотно очищается.

Чтобы создать пучок кривых из трех кривых Безье, исходящих из точки соприкосновения курсора мыши с полотном выполните следующие действия:
Создайте класс глобальных переменных для объектов: перо, полотно, координаты центра пучка и его концов, индикатора нажатия мыши.
Пример:
public class MyMouse
{ public static int ind; //индикатор нажатия мыши
public static Graphics graph; //полотно
public static Pen MyPen; //перо
public static Point pt, pt1, pt2, pt3;
}
Создайте обработчик нажатия мыши, в котором пропишите характеристики пера, инициализацию переменных для координат кривых и полотна. Чтобы отследить положение кнопок мыши в дальнейшем, зададим индикатору мыши значение 1 – «нажата». При движении мыши с нажатой клавишей (со значением индикатора равным 1), кривые будут перерисовываться. При движении мыши с не нажатой клавишей (со значением индикатора равным 0), кривые рисоваться не будут.
Пример.
private void panel1_MouseDown(object sender, MouseEventArgs e)
{ MyMouse.ind = 1;
MyMouse.graph = this.panel1.CreateGraphics();
MyMouse.MyPen = new Pen(Color.Azure, 1);
MyMouse.pt = new Point(); //центр пучка
MyMouse.pt2 = new Point();
MyMouse.pt3 = new Point();
MyMouse.pt1 = new Point();
}
Создайте обработчик отжатия мыши, в котором присвойте индикатору мыши значение 0 – «не нажата».
Пример.
private void panel1_MouseUp(object sender, MouseEventArgs e)
{ MyMouse.ind = 0; }
Создайте обработчик движения мыши. Если индикатор мыши равен единицы, то необходимо прописать в коде: очистку полотна, координаты центра пучка, и координаты кривых Безье. В качестве трех дополнительных точек кривых Безье используются статические точки, находящиеся на различных границах полотна. Дополнительные точки можно создавать и с помощью датчика случайных чисел.
Пример.
private void panel1_MouseMove(object sender, MouseEventArgs e)
{ if (MyMouse.ind == 1)
{ // Очищаем полотно
MyMouse.graph.Clear(Color.White);
//Считываем координаты мыши и присваиваем их координатам центра
MyMouse.pt.X = e.X; MyMouse.pt.Y = e.Y;
//Задаем цвет первой кривой
MyMouse.MyPen.Color = Color.Blue;
// Задаем дополнительные точки
MyMouse.pt1.X = 0; MyMouse.pt1.Y = 0;
MyMouse.pt2.X = 0; MyMouse.pt2.Y = panel1.Height;
MyMouse.pt3.X = panel1.Width; MyMouse.pt3.Y = panel1.Height;
// Рисуем первую кривую
MyMouse.graph.DrawBezier(MyMouse.MyPen, MyMouse.pt, MyMouse.pt1,
MyMouse.pt2, MyMouse.pt3);
// Вторая кривая
MyMouse.MyPen.Color = Color.Green;
MyMouse.pt1.X = panel1.Width; MyMouse.pt1.Y = 0;
MyMouse.pt2.X = panel1.Width; MyMouse.pt2.Y = panel1.Height;
MyMouse.pt3.X = 0; MyMouse.pt3.Y = panel1.Height;
MyMouse.graph.DrawBezier(MyMouse.MyPen, MyMouse.pt, MyMouse.pt1,
MyMouse.pt2, MyMouse.pt3);
// Третья кривая
MyMouse.MyPen.Color = Color.Red;
MyMouse.pt1.X = panel1.Width/3; MyMouse.pt1.Y = panel1.Height / 2;
MyMouse.pt2.X = 2*panel1.Width/3; MyMouse.pt2.Y = panel1.Height/2;
MyMouse.pt3.X = MyMouse.pt.X; MyMouse.pt3.Y = MyMouse.pt.Y;
MyMouse.graph.DrawBezier(MyMouse.MyPen, MyMouse.pt, MyMouse.pt1,
MyMouse.pt2, MyMouse.pt3);
} }
Создайте обработчик двойного щелчка мыши, в котором пропишите команду очистки полотна
private void panel1_MouseDoubleClick(object sender, MouseEventArgs e)
{ MyMouse.graph.Clear(Color.White);
}

[ Cкачайте файл, чтобы посмотреть ссылку ]
В этом примере создадим код для рисования треугольника. Координаты треугольника создаются случайным образом:
Чтобы создать треугольник:
Координаты вершин треугольника будут находиться в структуре “Treyg”. Для этого создадим переменные для работы со структурой и саму структуру.
public static class tr
{ public static Graphics graph;
public static Pen MyPen;
public struct Treyg
{ public struct A
{public static int x, y;};
public struct B
{ public static int x, y;};
public struct C
{ public static int x, y;};
}; }
С помощью датчика случайных чисел создадим координаты вершин треугольника. В данном примере размер панели взят фиксированный: 270х240.
private void treyg(object sender)
{ //Создаем треугольник
panel1.BackColor = Color.Green;
label1.Visible = false; Random r = new Random();
tr.graph = this.panel1.CreateGraphics();
tr.graph.Clear(Color.White);
tr.MyPen = new Pen(Color.Blue, 1);
tr.Treyg.A.x = r.Next(80)+10; tr.Treyg.A.y = r.Next(70)+10;
tr.Treyg.B.x = r.Next(80) + 80; tr.Treyg.B.y = r.Next(70) + 160;
tr.Treyg.C.x = r.Next(80) + 180; tr.Treyg.C.y = r.Next(70) + 80;
tr.graph.DrawEllipse(tr.MyPen, tr.Treyg.A.x, tr.Treyg.A.y, 2, 2);
tr.graph.DrawEllipse(tr.MyPen, tr.Treyg.B.x, tr.Treyg.B.y, 2, 2);
tr.graph.DrawEllipse(tr.MyPen, tr.Treyg.C.x, tr.Treyg.C.y, 2, 2);
// соединяем их линиями
tr.graph.DrawLine(tr.MyPen, tr.Treyg.A.x, tr.Treyg.A.y, tr.Treyg.B.x,
tr.Treyg.B.y);
tr.graph.DrawLine(tr.MyPen, tr.Treyg.B.x, tr.Treyg.B.y, tr.Treyg.C.x,
tr.Treyg.C.y);
tr.graph.DrawLine(tr.MyPen, tr.Treyg.C.x, tr.Treyg.C.y, tr.Treyg.A.x,
tr.Treyg.A.y);
}
Будем рисовать треугольник по щелчку мыши на панели:
private void panel1_Click(object sender, EventArgs e)
{ treyg(sender); }

Создание графика функции
В этом примере создадим код для построения графика функции 13 EMBED Equation.3 1415 на интервале 13 EMBED Equation.3 1415.

Чтобы построить график функции необходимо:
Создать объекты полотно и перо:
public static class graphiс
{ public static Graphics graph;
public static Pen MyPen;
};
Задать характеристики полотна и пера. Перьев может быть несколько: для построения осей и графиков.
graphic.graph = this.panel1.CreateGraphics();
graphic.graph.Clear(Color.White);
graphic.MyPen = new Pen(Color.Blue, 1);
Определить позиции начала координат и границы области рисования: X,Y - начало координат, Xmax, Ymax - границы области.
int X, Y, Xmax, Ymax;
Xmax = panel1.Size.Width; Ymax = panel1.Size.Height;
X = Xmax / 2; Y = Ymax / 2;
Построить оси декартовой системы координат:
// Ox:
graphic.graph.DrawLine(graphic.MyPen, 0, Y, Xmax, Y);
// Oy:
graphic.graph.DrawLine(graphic.MyPen, X, 0, X, Ymax);
Задать шаг для расчета точек по оси Ох в декартовой системе координат и начальную точку, в данном:
double h = 0.1, Xdec = -4, Ydec = Xdec*Xdec/2-4;
Задать масштаб и перевести координаты точки в декартовой системе координат в систему координат принятой в C#:
int d = 10, Xp = Convert.ToInt16(Xdec*d)+X, Yp =- Convert.ToInt16(Ydec*d)+Y;
Создать переменные для расчета следующей точки и задать цикл для построения графика:
// Следующая точка
int Xp1, Yp1;
// Рисуем график
while (Xdec< 4)
{ Xp1 = Convert.ToInt16((Xdec + h) * d)+X;
Yp1 = -Convert.ToInt16(((Xdec+h)*(Xdec + h)/2-4) * d) +Y;
graphic.graph.DrawLine(graphic.MyPen, Xp, Yp, Xp1, Yp1);
// graphic.graph.DrawLine(graphic.MyPen, 90, 190, 180, 185);
Xdec = Xdec + h; Ydec = Xdec *Xdec/2-4;
Xp = Convert.ToInt16(Xdec * d) + X; Yp =- Convert.ToInt16(Ydec * d)+Y;
}

Диаграммы
Компонент ZedGraphControl предназначен для построения различных видов диаграмм.

Для построения различного рода графиков в C# существует множество внешних библиотек и компонентов. В большинстве своем это закрытые и/или платные продукты/ Исключение составляет свободный компонент [ Cкачайте файл, чтобы посмотреть ссылку ]. Полную документацию по данному компоненту можно найти по адресу [ Cкачайте файл, чтобы посмотреть ссылку ].
Компонент позволяет строить как простые линейные графики, так и прямоугольные и круговые. Компонент совместим с .NET 2.0 и корректно работает в MS Visual Studio 2005 и 2008.
Внимание. Компонент ZedGraphControl не входит в установочный пакет Microsoft Visual C# 2008 Express Edition. Для работы с этим компонентом, его необходимо предварительно установить на компьютер.

Установка компонента по работе с диаграммами
Чтобы установить компонент ZedGraphControl на компьютер необходимо:
Скопировать папку с библиотекой ZedGraph.dll на компьютер в папку Microsoft Visual C# 2008 Express Edition.
Добавить новый компонент на Панель элементов. Для этого одним щелчком левой кнопкой мыши выделите вкладку на панели элементов, в которую необходимо добавить компонент ZedGraphControl.
Выбрать в программном меню Сервис команду Выбрать элементы панели элементов.
В открывшемся окне перейти на вкладку Компоненты .Net Framework. Если в списке компонентов отсутствует компонент ZedGraphControl, то нажать кнопку Обзор, найти файл ZedGraph.dll.
Выбрать компонент из списка компонентов и нажать кнопку ОК.
Результат. Компонент появится на панели элементов в выбранной вкладке.
Если перенести компонент ZedGraphControl на форму, то на форме появится заготовка с диаграммой:

Подключить библиотеку в модуле:
using ZedGraph;
Структура всех диаграмм одинаковая - главное окно, внутри которого располагается экземпляр класса ZedGraphControl. Имя экземпляра класса - zedGraph. В конструкторе окна вызывается метод DrawGraph(), внутри которого и происходит заполнение компонента данными.
Структура:
private void Draw()
{int i,x;
// Создание полотно
GraphPane pane = new GraphPane()
// Создание прямоугольной рабочей области;
Rectangle r = new Rectangle();
r.Width = zedGraphControl1.Width; r.Height = zedGraphControl1.Height;
// Очистка полотна
pane.CurveList.Clear();
// Создание списка точек, по которым будет строится график (X, Y)
PointPairList list = new PointPairList();
for (i = 0; i < 5; i++)
{ list.Add(Xi,Yi,n); }
// Построение графика, например:
LineItem myCurve = pane.AddCurve("График", list, Color.Blue, SymbolType.None);
// Настройка параметров:
..
// Построение осей
pane.AxisChange();
// Совмещаем полотно и рабоую область
pane.Rect = r;
// Совмещаем полотно и компонент zedGraphControl
zedGraphControl1.GraphPane = pane;
}

Основные методы по работе с компонентом zedGraphControl
1) Создание панели для рисования
GraphPane pane = new GraphPane();
2) Очистка списка кривых на тот случай, если до этого сигналы уже были нарисованы
pane.CurveList.Clear ();
3) Создание списка точек (Х, У) для построения кривой:
PointPairList list = new PointPairList ();
4) Заполнение списка точек (Х, У) для построения кривой, например на диапазоне [-50; 50]:
double xmin = -50;
double xmax = 50;
for (double x = xmin; x <= xmax; x += 0.01)
{// добавим в список точку
list.Add (x, f(x));
}
5) Создание кривой с названием "График", которая будет рисоваться голубым цветом (Color.Blue), опорные точки выделяться не будут (SymbolType.None):
LineItem myCurve = pane.AddCurve ("Название графика", список точек, цвет, SymbolType.None);
Пример:
LineItem myCurve = pane.AddCurve ("График", list, Color.Blue, SymbolType.None);
6) Обновление данных об осях с помощью метода AxisChange (). В противном случае на рисунке будет показана только часть графика, которая умещается в интервалы по осям, установленные по умолчанию.
pane.AxisChange ();
7) Создание полотна:
zedGraphControl1.GraphPane = pane;
8) Изменение пределов отображаемой области по осям
double xmin_limit = -10;
double xmax_limit = 80;
double ymin_limit = -1.0;
double ymax_limit = 1.0;
Устанавливаем интересующий нас интервал по оси X
pane.XAxis.Scale.Min = xmin_limit;
pane.XAxis.Scale.Max = xmax_limit;
Устанавливаем интересующий нас интервал по оси Y
pane.YAxis.Scale.Min = ymin_limit;
pane.YAxis.Scale.Max = ymax_limit;
9) Изменение порядка нумерации:
Примечание. Если минимальное значение оси 0, то нумерация пойдет: 3, 13,..
pane.YAxis.Scale.BaseTic = 3;
10) Изменение расстояния между крупными и мелкими рисками
Шаг от минимального значения оси для крупных рисок:
pane.YAxis.Scale.MajorStep = 10;
Шаг от минимального значения оси для мелких рисок:
pane.YAxis.Scale.MinorStep=2;
11) Настройка масштаба диаграммы по размеру компонента
Rectangle r = new Rectangle();
r.Width = zedGraphControl1.Width;
r.Height = zedGraphControl1.Height;
pane.Rect = r;
12) Отключение лупы (Zoom):
zedGraphControl1.IsEnableHZoom = false;
zedGraphControl1.IsEnableVZoom = false;
13) Построение графика в виде отдельных не связанных точек
// Создадим кривую с названием "Разброс". Обводка ромбиков будут рисоваться голубым цветом (Color.Blue), Опорные точки - ромбики (SymbolType.Diamond)
LineItem myCurve = pane.AddCurve ("Разброс", list, Color.Blue, SymbolType.Diamond);
//У кривой линия будет невидимой
myCurve.Line.IsVisible = false;
//Цвет заполнения отметок (ромбиков) – голубой
myCurve.Symbol.Fill.Color = Color.Blue;
//Тип заполнения - сплошная заливка
myCurve.Symbol.Fill.Type = FillType.Solid;
//Размер ромбиков
myCurve.Symbol.Size = 7;
14) Обновление графика
Global.f7.Refresh();
или
zedGraphControl1.Refresh();
15) Удаление легенды:
pane.Legend.IsVisible = false;
16) Вставка заголовка диаграммы:
pane.Title.Text = "Графики";
17) Удаление горизонтальной линии по уровню y = 0 на графике
pane.YAxis.MajorGrid.IsZeroLine = false;
18) Построение графика по вертикали
//Линия по нулевому уровню должна быть перпендикулярна оси X
pane.XAxis.MajorGrid.IsZeroLine = true;
//Поменяем названия осей, чтобы еще больше запутать противника :)
pane.XAxis.Title.Text = "YAxis";
pane.YAxis.Title.Text = "XAxis";
19) Построение на графике линий, стрелок и размещение текста
//Линию рисуем после обновления осей с помощью AxisChange (), так как мы будем использовать значения. Нарисуем горизонтальную пунктирную линию от левого края до правого на уровне y = 0.5
double level = 0.5;
LineObj line = new LineObj (pane.XAxis.Scale.Min, level,
pane.XAxis.Scale.Max, level);
//Стиль линии – пунктирная
line.Line.Style = System.Drawing.Drawing2D.DashStyle.Dash;
//Добавим линию в список отображаемых объектов
pane.GraphObjList.Add (line);
//Нарисуем стрелку, указывающую на максимум функции
Координаты точки, куда указывает стрелка
Координаты привязаны к осям
double xend = 0.0;
double yend = f(0);
//Координаты точки начала стрелки
double xstart = xend + 5.0;
double ystart = yend + 0.1;
//Рисование стрелки с текстом
Создадим стрелку
ArrowObj arrow = new ArrowObj (xstart, ystart, xend, yend);
//Добавим стрелку в список отображаемых объектов
pane.GraphObjList.Add (arrow);
//Напишем текст около начала стрелки
Координаты привязаны к осям
TextObj text = new TextObj ("Max", xstart, ystart);
//Отключим рамку вокруг текста
text.FontSpec.Border.IsVisible = false;
//Изменим цвет текста
text.FontSpec.FontColor = Color.Green;
//Добавим текст в список отображаемых объектов
pane.GraphObjList.Add (text);
20) Отображение сетки и изменение ее внешнего вида
//Включаем отображение сетки напротив крупных рисок по оси X
pane.XAxis.MajorGrid.IsVisible = true;
//Задаем вид пунктирной линии для крупных рисок по оси X:
//Длина штрихов равна 10 пикселям, ...
pane.XAxis.MajorGrid.DashOn = 10;
//затем 5 пикселей – пропуск
pane.XAxis.MajorGrid.DashOff = 5;
//Включаем отображение сетки напротив мелких рисок по оси X
pane.YAxis.MinorGrid.IsVisible = true;
21) Построение гистограммы и текстовых осей
int itemscount = 5;
//Подписи под столбиками
string[] names = new string[itemscount];
//Высота столбиков
double[] values = new double[itemscount];
//Заполним данные
for (int i = 0; i < itemscount; i++)
{names[i] = string.Format ("Текст {0}", i);
values[i] = rnd.NextDouble ();
}
//Создадим кривую-гистограмму Первый параметр - название кривой для легенды Второй параметр - значения для оси X, т.к. у нас по этой оси будет идти текст, а функция ожидает тип параметра double[], то пока передаем null Третий параметр - значения для оси Y Четвертый параметр – цвет
BarItem curve = pane.AddBar ("Гистограмма", null, values, Color.Blue);
//Настроим ось X так, чтобы она отображала текстовые данные
pane.XAxis.Type = AxisType.Text;
//Уставим для оси наши подписи
pane.XAxis.Scale.TextLabels = names;
22) Изменение размеров шрифтов у различных элементов графика
//Размеры шрифтов для разных элементов графика
int labelsXfontSize = 25;
int labelsYfontSize = 20;
int titleXFontSize = 25;
int titleYFontSize = 20;
int legendFontSize = 15;
int mainTitleFontSize = 30;
//Установим размеры шрифтов для меток вдоль осей
pane.XAxis.Scale.FontSpec.Size = labelsXfontSize;
pane.YAxis.Scale.FontSpec.Size = labelsYfontSize;
//Установим размеры шрифтов для подписей по осям
pane.XAxis.Title.FontSpec.Size = titleXFontSize;
pane.YAxis.Title.FontSpec.Size = titleYFontSize;
//Установим размеры шрифта для легенды
pane.Legend.FontSpec.Size = legendFontSize;
//Установим размеры шрифта для общего заголовка
pane.Title.FontSpec.Size = mainTitleFontSize;
pane.Title.FontSpec.IsUnderline = true;
22) Установка масштаба по осям по умолчанию
//Установим масштаб по умолчанию для оси X
pane.XAxis.Scale.MinAuto = true;
pane.XAxis.Scale.MaxAuto = true;
23) Построение пунктирные и штрихпунктирные линии
//Используем предустановленный стиль, рисующий кривую точками. Идентификатор стиля определен в стиле
System.Drawing.Drawing2D.DashStyle.myCurve.Line.Style = DashStyle.Dot;
//Укажем, что график должен быть сглажен, иначе не сплошные линии будут выглядеть неаккуратно. Это происходит из-за того, что без использования сглаживания ZedGraph будет каждый участок линии рисовать независимо от соседних.
myCurve.Line.IsSmooth = true;
//Используем предустановленный стиль, рисующий кривую в виде штрихпунктирной линии.
myCurve.Line.Style = DashStyle.DashDot;
//Определим свой стиль рисования линии
myCurve.Line.Style = DashStyle.Custom;
//Длина пунктира будет 10 у.е. (1 у.е = 1/72 inch)
myCurve.Line.DashOn = 10.0f;
//Длина пропуска между пунктирами
myCurve.Line.DashOff = 3.0f;
24) Использование кластеров в гистограммах
int itemscount = 5;
Random rnd = new Random ();
//Высота столбиков
double[] YValues1 = new double[itemscount];
double[] YValues2 = new double[itemscount];
double[] YValues3 = new double[itemscount];
double[] XValues = new double[itemscount];
//Заполним данные
for (int i = 0; i < itemscount; i++)
{XValues[i] = i + 1;
YValues1[i] = rnd.NextDouble ();
YValues2[i] = rnd.NextDouble ();
YValues3[i] = rnd.NextDouble ();
}
//Создадим три гистограммы
Так как для всех гистограмм мы передаем одинаковые массивы координат по X, то столбики будут группироваться в кластеры в этих точках.
BarItem bar1 = pane.AddBar ("Values1", XValues, YValues1, Color.Blue);
BarItem bar2 = pane.AddBar ("Values2", XValues, YValues2, Color.Red);
BarItem bar3 = pane.AddBar ("Values3", XValues, YValues3, Color.Yellow);
//Расстояния между столбиками в кластере (группами столбиков)
Pane.BarSettings.MinBarGap = 0.0f;
//Увеличим расстояние между кластерами в 2.5 раза
pane.BarSettings.MinClusterGap = 2.5f;

Примеры построения диаграмм
Создадим приложение, иллюстрирующее работу с диаграммами:

Для этого разместим на форме компоненты dataGridView1, menuStrip1 и zedGraphControl1.
В обработчике события открытия формы пропишем команды по генерированию данных в таблице с помощью датчика случайных чисел:
private void Form1_Shown(object sender, EventArgs e)
{ int i, j; Random r = new Random();
dataGridView1.ColumnCount = 5;
dataGridView1.RowCount = 2;
for (i = 0; i < 2; i++)
{ dataGridView1.Rows[i].HeaderCell.Value = "i="+i.ToString();
for (j = 0; j < 5; j++)
{ if (i == 0) { dataGridView1[j, i].Value = j+2005; }
else
{ dataGridView1[j, i].Value = r.Next(40,88); };
}; };}
В обработчиках событий нажатия кнопок, отвечающих за построение диаграмм пропишем соответствующий код:
private void toolStripMenuItem1_Click(object sender, EventArgs e)
{ Draw();
zedGraphControl1.Visible = true;
}
где метод Draw() зависит от кнопки:
График:

private void Draw()
{int i,x;
GraphPane pane = new GraphPane();
Rectangle r = new Rectangle();
r.Width = zedGraphControl1.Width; r.Height = zedGraphControl1.Height;
pane.CurveList.Clear();
PointPairList list = new PointPairList();
for (i = 0; i < 5; i++)
{ list.Add(Convert.ToDouble(dataGridView1[i, 0].Value), Convert.ToDouble(dataGridView1[i, 1].Value),5); }
LineItem myCurve = pane.AddCurve("График", list, Color.Blue,SymbolType.None);
pane.Legend.IsVisible = false;
pane.Title.Text = "Графики";
pane.XAxis.Scale.Min =2005;
pane.XAxis.Scale.Max =2009;
pane.YAxis.Scale.Min = 40;
pane.YAxis.Scale.Max = 88;
pane.YAxis.Scale.BaseTic = 3;
pane.YAxis.Scale.MajorStep = 10;
pane.YAxis.Scale.MinorStep=5;
pane.XAxis.MajorGrid.IsVisible = true;
pane.XAxis.MajorGrid.DashOn = 10;
pane.XAxis.MajorGrid.DashOff = 5;
pane.YAxis.MinorGrid.IsVisible = true;
pane.AxisChange(); pane.Rect = r;
zedGraphControl1.GraphPane = pane;
zedGraphControl1.IsEnableHZoom = false;
zedGraphControl1.IsEnableVZoom = false;
}

Точечный график:

private void Draw1()
{ int i, x;
GraphPane pane = new GraphPane();
Rectangle r = new Rectangle();
r.Width = zedGraphControl1.Width; r.Height = zedGraphControl1.Height;
pane.CurveList.Clear();
PointPairList list = new PointPairList();
for (i = 0; i < 5; i++)
{ list.Add(Convert.ToDouble(dataGridView1[i, 0].Value), Convert.ToDouble(dataGridView1[i, 1].Value), 5); }
LineItem myCurve = pane.AddCurve("Разброс", list, Color.Blue, SymbolType.Diamond);
myCurve.Line.IsVisible = false;
myCurve.Symbol.Fill.Color = Color.Blue;
myCurve.Symbol.Fill.Type = FillType.Solid;
myCurve.Symbol.Size = 7;
pane.XAxis.Scale.Min = 2005;
pane.XAxis.Scale.Max = 2009;
pane.YAxis.Scale.Min = 40;
pane.YAxis.Scale.Max = 88;
pane.YAxis.Scale.BaseTic = 3;
pane.YAxis.Scale.MajorStep = 10;
pane.YAxis.Scale.MinorStep = 5;
pane.AxisChange(); pane.Rect = r;
ArrowObj arrow = new ArrowObj(Convert.ToDouble(dataGridView1[1, 0].Value) + 0.1, Convert.ToDouble(dataGridView1[1, 1].Value) + 3, Convert.ToDouble(dataGridView1[1, 0].Value), Convert.ToDouble(dataGridView1[1, 1].Value));
pane.GraphObjList.Add (arrow);
TextObj text = new TextObj ("Max", Convert.ToDouble(dataGridView1[1, 0].Value)+0.1, Convert.ToDouble(dataGridView1[1, 1].Value)+3);
text.FontSpec.Border.IsVisible = false;
text.FontSpec.FontColor = Color.Green;
pane.GraphObjList.Add (text);
zedGraphControl1.GraphPane = pane;
zedGraphControl1.IsEnableHZoom = false;
zedGraphControl1.IsEnableVZoom = false;
}

Построение нескольких графиков:
private void Draw2()
{ int i, x;
GraphPane pane = new GraphPane();
Rectangle r = new Rectangle();
r.Width = zedGraphControl1.Width; r.Height = zedGraphControl1.Height;
pane.CurveList.Clear();
PointPairList list1 = new PointPairList();
for (i = 0; i < 5; i++)
{ list1.Add(Convert.ToDouble(dataGridView1[i, 0].Value), Convert.ToDouble(dataGridView1[i, 1].Value), 5); }
PointPairList list2 = new PointPairList();
for (i = 0; i < 5; i++)
{ list2.Add(Convert.ToDouble(dataGridView1[i, 0].Value), Convert.ToDouble(dataGridView1[i, 1].Value)+5); }
LineItem myCurve = pane.AddCurve("График1", list1, Color.Blue, SymbolType.None);
LineItem my1Curve = pane.AddCurve("График2", list2, Color.Green, SymbolType.None);
pane.XAxis.Scale.Min = 2005;
pane.XAxis.Scale.Max = 2009;
pane.YAxis.Scale.Min = 40;
pane.YAxis.Scale.Max = 88;
pane.YAxis.Scale.BaseTic = 3;
pane.YAxis.Scale.MajorStep = 10;
pane.YAxis.Scale.MinorStep = 5;
pane.AxisChange(); pane.Rect = r;
zedGraphControl1.GraphPane = pane;
zedGraphControl1.IsEnableHZoom = false;
zedGraphControl1.IsEnableVZoom = false;
zedGraphControl1.Refresh();
}


Гистограмма:
private void Draw3()
{ int i, x;
GraphPane pane = new GraphPane();
Rectangle r = new Rectangle();
r.Width = zedGraphControl1.Width; r.Height = zedGraphControl1.Height;
pane.CurveList.Clear();
int itemscount = 5;
string[] names = new string[itemscount];
double[] values = new double[itemscount];
for (i = 0; i < itemscount; i++)
{ names[i] = string.Format("Год{0}", Convert.ToDouble(dataGridView1[i, 0].Value));
values[i] = Convert.ToDouble(dataGridView1[i, 1].Value); }
BarItem curve = pane.AddBar("Гистограмма", null, values, Color.Blue);
pane.XAxis.Type = AxisType.Text;
pane.XAxis.Scale.TextLabels = names;
pane.Title.Text = "Гистограмма";
//pane.XAxis.Scale.Min = 2005;
//pane.XAxis.Scale.Max = 2009;
//pane.YAxis.Scale.Min = 40;
//pane.YAxis.Scale.Max = 88;
//pane.YAxis.Scale.BaseTic = 3;
//pane.YAxis.Scale.MajorStep = 10;
//pane.YAxis.Scale.MinorStep = 5;
pane.AxisChange(); pane.Rect = r;
zedGraphControl1.GraphPane = pane;
zedGraphControl1.IsEnableHZoom = false;
zedGraphControl1.IsEnableVZoom = false;
zedGraphControl1.Refresh();
}

Гистограмма с применением кластеров:

private void Draw4()
{ int i, x;
GraphPane pane = new GraphPane();
Rectangle r = new Rectangle();
r.Width = zedGraphControl1.Width; r.Height = zedGraphControl1.Height;
pane.CurveList.Clear();
int itemscount = 5;
string[] names = new string[itemscount];
double[] values1 = new double[itemscount];
double[] values2 = new double[itemscount];
double[] XValues = new double[itemscount];
for (i = 0; i < itemscount; i++)
{ names[i] = string.Format("Год{0}", Convert.ToDouble(dataGridView1[i, 0].Value));
values1[i] = Convert.ToDouble(dataGridView1[i, 1].Value);
values2[i] = Convert.ToDouble(dataGridView1[i, 1].Value)+10;
XValues[i] = Convert.ToDouble(dataGridView1[i, 0].Value);
}
BarItem bar1 = pane.AddBar("Values1", XValues, values1, Color.Blue);
BarItem bar2 = pane.AddBar("Values2", XValues, values2, Color.Red);
pane.BarSettings.MinBarGap = 0.0f;
pane.BarSettings.MinClusterGap = 2.5f;
pane.XAxis.Type = AxisType.Text;
pane.XAxis.Scale.TextLabels = names;
pane.Title.Text = "Гистограмма";
pane.AxisChange();
pane.Rect = r;
zedGraphControl1.GraphPane = pane;
zedGraphControl1.IsEnableHZoom = false;
zedGraphControl1.IsEnableVZoom = false;
zedGraphControl1.Refresh();
}

Лабораторная работа №1.
Основные элементы управления.
Для выполнения лабораторной работы необходимы сведения, представленные в п.1.1, 1.2, 2, 3.1-3.3, 3.4.1-3.4.4, 3.4.7, 3.4.9
Цель. Приобрести навыки работы с элементами управления: форма, текстовое поле, радиокнопка, переключатель, панель, надпись.
Создать проект из одной формы:
















При нажатии кнопки Ввести в правой панели должен появляться текст с именем, введенным пользователем в левой панели и выбранными увлечениями. При повторном нажатии кнопки «Ввести» старый текст в правой панели должен удаляться и выводиться новый.

Лабораторная работа №2.
Создание титульной формы.
Для выполнения лабораторной работы необходимы сведения, представленные в п.1.1-1.4, 2, 3.1-3.3, 3.4.1-3.4.4, 3.4.10
Цель. Приобрести навыки обработки данных, полученных из формы и отображения результатов.
Создать приложение со следующими формами:
титульная форма:

По кнопке «Далее» должен осуществляться переход на рабочую форму. Титульная форма должна скрываться.
Свойства титульной формы: жесткие границы, модальная.














рабочая форма с калькулятором следующего вида:















По кнопке Очистка текстовые поля должны очищаться, а переключатель устанавливаться в пункт «*».

Лабораторная работа №3
Дочерние формы, программное меню
Для выполнения лабораторной работы необходимы сведения, представленные в п.1.1-1.4, 2, 3.1-3.3, 3.4.1-3.4.4, 3.4.12
Цель. Приобрести навыки создания различных видов программного меню, осуществления переходов между формами, ознакомление с дочерними формами.
Создать проект из четырех форм: главная форма и дочерняя к ней, независимая форма и дочерняя к ней.


Главная форма
Главная форма должна иметь свою иконку, не содержать кнопки сворачивания и разворачивания окна, иметь жесткие границы.
В главной форме создать программное меню с пунктами Проект, Формат и Окно:

Пункт Проект главной формы
Пункт Проект должен содержать разделитель и команды: Независимая форма, Дочерняя форма, Закрыть проект

Действия при выборе команд пункта Проект:
Независимая форма – открытие независимого окна со своим программным меню:

Дочерняя форма – открытие дочернего окна:

Закрыть проект – закрытие приложения.
Пункт Формат главной формы
Пункт Формат должен содержать команды Крупный шрифт и Рисунок.


Действия при выборе команд пункта Формат:
При выборе команды Крупный шрифт:
должен изменяться шрифт меню главной формы;
рядом с командой Крупный шрифт должен появляться символ выбора команды ();

при повторном выборе команды Крупный шрифт символ должен исчезать, а шрифт становится первоначальным.

При выборе команды Рисунок:
В качестве фона должен появляться рисунок, прописанный в коде программы;
рядом с командой Рисунок должен появляться символ выбора команды ();

при повторном выборе команды Рисунок символ должен исчезать, а фон становится первоначальным.
Независимая форма
Независимая форма должна иметь свою иконку и содержать свое программное меню с пунктами Проект и Границы.
Пункт Проект независимой формы
Пункт Проект должен содержать команды: Дочерняя форма и Закрыть:

Действия при выборе команд пункта Проект:
Дочерняя форма – открытие дочернего окна;
Закрыть – закрытие независимого окна.
Пункт Границы независимой формы
Пункт Границы должен содержать команды: Обычные, Отсутствуют и ЗD:

При открытии формы по умолчанию устанавливается тип границ Обычные и возле этого пункта меню должен стоять символа выбора .

Действия при выборе команд пункта Границы:
При выборе одной из команд пункта Границы:
должен изменяться стиль границ независимой формы;
рядом с выбранным стилем границ должен появляться символ выбора команды ();



Дочерняя форма к главной форме
Дочерняя форма должна содержать собственное программное меню, встраиваемое в меню главной формы. Программное меню дочерней формы должно состоять из пунктов: Проект и Шрифт.

При открытии из главной формы дочерней формы команда Проект главной формы должна заменяться командой Проект дочерней формы. Команда Шрифт должна добавляться в меню главной формы после команды Окно.

При открытии дочерней формы из главной формы название дочерней формы должно отображаться в меню Окно главной формы.

Меню Формат должно остаться без изменений и содержать команды: Крупный шрифт и Рисунок.

Пункт Проект дочерней формы к главной форме
Пункт Проект должен содержать одну команду Закрыть все, при выборе которой закрывается приложение.
Пункт Шрифт дочерней формы к главной форме
Пункт Шрифт должен содержать команды Обычный и курсив. При открытии дочерней формы по умолчанию устанавливается стиль шрифта Обычный и возле этого пункта меню должен стоять символа выбора .
Действия при выборе команд пункта Шрифт:
При выборе одной из команд пункта Шрифт:
должен изменяться стиль шрифта программного меню. При этом, при изменении стиля шрифта должен сохраняться его размер, установленный в пункте Формат. Соответственно, при изменении размера шрифта, должен сохраняться стиль шрифта, выбранный в пункте Шрифт.
рядом с выбранным стилем границ должен появляться символ выбора команды ();

Дочерняя форма к независимой форме
Дочерняя форма должна иметь такую же как у независимой формы иконку и содержать собственное программное меню, встраиваемое в меню независимой формы. Программное меню дочерней формы должно состоять из пунктов: Проект и Фон.

При открытии дочерней формы к независимой форме программное меню дочерней формы должно полностью заменяться программным меню дочерней формы.

Пункт Проект дочерней формы к независимой форме
Пункт Проект должен содержать одну команду Закрыть, при выборе которой закрывается независимая форма.
Пункт Фон дочерней формы к независимой форме
Пункт Фон должен содержать команды Отсутствует, Ветер и Восхождение. При открытии дочерней формы по умолчанию фоновый рисунок отсутствует, поэтому рядом с командой Отсутствует должен стоять символа выбора .
Действия при выборе команд пункта Фон:
При выборе одной из команд пункта Фон:
должен изменяться фон дочерней формы;
рядом с выбранным фоном должен появляться символ выбора команды ();


Лабораторная работа №4
Обработка списков в С#
Для выполнения лабораторной работы необходимы сведения, представленные в п.1.1-1.4, 2, 3.1-3.3, 3.4.1-3.4.4, 3.4.9
Цель. Приобрести навыки обработки текстовой информации, приобрести более глубокие знания компонентов..
Создайте приложение:










Описание:
В разделе «Цвет текста» выбирается цвет текста, печатаемого в центральной части окна. Значение по умолчанию – черный. Всего не менее трех цветов.
В разделе «Размер шрифта» выбирается размер шрифта для текста, печатаемого в центральной части окна. Значение по умолчанию – 12пт. Минимальное значение – 8пт. Максимальное значение 20пт. Значения можно выбирать только из списка и нельзя вводить с клавиатуры.
В разделе «Номер строки» выбирается номер строки текста, которая должна отобразиться в разделе «Текст строки». Нумерация с единицы. Значение по умолчанию – 1. Обеспечить корректность верхних и нижних границ.

Лабораторная работа №5
Математические функции в C#
Для выполнения лабораторной работы необходимы сведения, представленные в п.1.1-1.4, 2, 3.1-3.3, 3.4
Цель. Закрепить навыки работы с основными компонентами Visual C#. Ознакомиться с библиотекой Math.dll
Создайте программу с математическими функциями:








Описание:
1) В разделе Арифметика список Действие содержит операции: сумма, разность, произведение, частное, остаток от деления.
2) В разделе Библиотека список Действие содержит операции: абсолютная величина, арккосинус, арктангенс, косинус, тангенс, экспонента, число Пи, десятичный логарифм, логарифм, округление, извлечение квадратного корня.
3) Программа должна отслеживать некорректный ввод данных: данных не принадлежащих области определения функции или ввод текста.

Лабораторная работа №6.
Обработка ошибок.
Для выполнения лабораторной работы необходимы сведения, представленные в п.1.1-1.4, 2, 3.1-3.3, 3.4, 1.7, 3.5
Цель. Закрепить навыки работы с основными компонентами Visual C#. Ознакомиться с библиотекой Math.dll
К лабораторной работе №5 добавить функции проверки корректности вводимых данных:
В случае ввода в текстовые поля значений, которые не являются числом организовать появление диалогового окна с сообщением об ошибке и двумя кнопками: «исправить», «отменить».
По кнопке «исправить» - выделение ошибочной части введенного значения.
По кнопке «отменить» - очистка текстовых полей.
В случае ввода в текстовые поля значений, выходящих за область определения выбранной функции – появление аналогичного первому случаю диалогового окна.


Лабораторная работа №7.
Панель инструментов.
Для выполнения лабораторной работы необходимы сведения, представленные в п.1.1-1.4, 2, 3.1-3.3, 3.4, 1.7, 3.4.23, 3.4.13
Цель. Приобрести навыки создания панели инструментов, вкладок и создания глобальных методов.
Создать приложение со следующими элементами:
Титульная форма: 2) Форма 0-го уровня:
















Форма 1-го уровня (аналог формы 0-го уровня).













Кнопка «Далее» - новая задача на данном уровне.
Кнопка «Проверить» - вывод результатов решения: «Верно» или «Ошибка! Корни: x1=; x2=» .
Замечание: корни уравнений 0-го уровня должны быть целыми, дискриминант на обоих уровнях не должен быть отрицательным.

Лабораторная работа №8.
Таблицы.
Для выполнения лабораторной работы необходимы сведения, представленные в п.1.1-1.4, 1.6, 2, 3.1-3.3, 3.4, 1.7, 3.4.15
Цель. Приобрести навыки работы с массивами.
Создать приложение со следующими элементами и функциями:















Рисунок 1 – Главная форма.















Рисунок 2 – Форма с матрицами

Главная форма (рис. 1).
При нажатии любой из кнопок «Автоматически»или форма принимает вид рис. 2.
Кнопка «Автоматически» - автоматическое создание матрицы заданного размера и автоматическое вычисление. На форме присутствуют надписи, таблицы и кнопка «Отмена».
Кнопка «Вручную» - создание матрицы вручную. На форме присутствуют надписи, одна таблица для ввода данных, кнопки «Вычислить», «Очистить», «Отмена». По кнопке «Вычислить» появляется результат в виде числа для первого задания или в виде таблицы для второго задания.
Задания:
Найти количество строк, не содержащих ни одного нулевого элемента;
Поменять местами два произвольных столбца матрицы.

Лабораторная работа №9 .
Файлы.
Для выполнения лабораторной работы необходимы сведения, представленные в п.1.1-1.6, 2, 3.1-3.3, 3.4, 1.7, 3.4.16
Цель. Приобрести навыки работы с текстовыми файлами и диалоговыми окнами открытия и сохранения информации.
В лабораторной работе №8 в программное меню добавить опцию «Файл» с пунктами «Сохранить» и «Открыть».
По команде «Сохранить» открывается стандартное окно Windows по работе с файловой системой. Данные записываются в специально отведенный для этого каталог в текстовый файл с расширением *.myp (my program), например, в следующем виде:
Дано:

Результат:

1
0
2
3

3
0
2
1

-5
7
0
1

1
7
0
-5

2
9
-3
5

5
9
-3
2

1
1
6
11

11
1
6
1











По команде «Открыть» открывается стандартное окно Windows по работе с файловой системой. Первая матрица (дано:) считываются из выбранного файла и отображается на второй форме (рис.2).

Лабораторная работа №10.
Отображение HTML-файлов.
Для выполнения лабораторной работы необходимы сведения, представленные в п.1.1-1.4, 2, 3.1-3.3, 3.4, 1.7, 3.4.25
Цель. Приобрести навыки работы с html_страницами.
В лабораторной работе №9 в программное меню добавить опцию «Справка» с пунктами «Матрицы», «О программе», «Клавиатура».
При выборе команды «Матрицы» открывается окно с HTML-документом.. HTML – документ должен быть создан самостоятельно, содержать информацию о матрицах, о способе обращения к элементу матрицы, описание свойства сложения матриц, пример сложения матриц. Текст должен быть отформатирован, иметь заголовки, разные стили и начертания шрифта.
При выборе команды «О программе» открывается окно с HTML-документом.. HTML – документ должен быть создан самостоятельно, содержать информацию о программе и ее авторах.
При выборе команды «Клавиатура» открывается окно с HTML-документом.. HTML – документ должен быть создан самостоятельно, содержать информацию о событиях клавиатуры из п.2.
Создать процедуры обработки событий нажатия клавиш клавиатуры:
Enter – сложение матриц;
Esc – очистка матриц;
Создать строку состояния, в которой отобразить время текущее, дату, подсказка при наведении мышки на объект.

Лабораторная работа №11.
Бестиповые указатели.
Для выполнения лабораторной работы необходимы сведения, представленные в п.1.1-1.7, 2, 3.1-3.3, 3.5
Цель. Приобрести навыки работы с динамическими переменными.
Создать приложение со следующими элементами и функциями:











где а и b – бестиповые указатели.

Лабораторная работа по Delphi №12.
Связные списки.
Для выполнения лабораторной работы необходимы сведения, представленные в п.1.1-1.7, 2, 3.1-3.3, 3.4.
Цель. Закрепить навыки работы с динамическими переменными и приобрести навыки работы со связными списками.
Создать приложение со следующими элементами и функциями:
















Замечание: кнопка «Вычислить» - запускает выбранную операцию;
кнопка «Очистить» - очищает все поля;
операции: «нет» (кнопка «Вычислить» ничего не делает)
«удалить», «вставить», «заменить», «найти»

Лабораторная работа №13
Графика
Для выполнения лабораторной работы необходимы сведения, представленные в п.1.1-1.4, 2, 3.1-3.3, 3.4, 1.7, 3.6
Цель. Приобрести навыки работы с различного вида графическими объектами.
Создать приложение с четырьмя вкладками для выполнения следующих задач:
Построение на одной координатной плоскости разными стилями рисования графиков функций на заданных интервалах. Наличие координатных осей, рисок и меток обязательно.



Функция 1.
Функция 2.

1
13 EMBED Equation.3 1415
13 EMBED Equation.3 1415

2
13 EMBED Equation.3 1415
13 EMBED Equation.3 1415

3
13 EMBED Equation.3 1415
13 EMBED Equation.3 1415

4
13 EMBED Equation.3 1415
13 EMBED Equation.3 1415

5
13 EMBED Equation.3 1415
13 EMBED Equation.3 1415

6
13 EMBED Equation.3 1415
13 EMBED Equation.3 1415

7
13 EMBED Equation.3 1415
13 EMBED Equation.3 1415

8
13 EMBED Equation.3 1415
13 EMBED Equation.3 1415

9
13 EMBED Equation.3 1415
13 EMBED Equation.3 1415

10
13 EMBED Equation.3 1415
13 EMBED Equation.3 1415

11
13 EMBED Equation.3 1415
13 EMBED Equation.3 1415

12
13 EMBED Equation.3 1415; 13 EMBED Equation.3 1415, 13 EMBED Equation.3 1415.
13 EMBED Equation.3 1415, 13 EMBED Equation.3 1415, 13 EMBED Equation.3 1415.

13
13 EMBED Equation.3 1415; 13 EMBED Equation.3 1415, 13 EMBED Equation.3 1415
13 EMBED Equation.3 1415; 13 EMBED Equation.3 1415, 13 EMBED Equation.3 1415

14
13 EMBED Equation.3 1415; 13 EMBED Equation.3 1415, 13 EMBED Equation.3 1415
13 EMBED Equation.3 1415; 13 EMBED Equation.3 1415, 13 EMBED Equation.3 1415

15
13 EMBED Equation.3 1415; 13 EMBED Equation.3 1415, 13 EMBED Equation.3 1415.
13 EMBED Equation.3 1415; 13 EMBED Equation.3 1415, 13 EMBED Equation.3 1415.

16
13 EMBED Equation.3 1415; 13 EMBED Equation.3 1415, 13 EMBED Equation.3 1415.
13 EMBED Equation.3 1415; 13 EMBED Equation.3 1415, 13 EMBED Equation.3 1415.

17
13 EMBED Equation.3 1415; 13 EMBED Equation.3 1415, 13 EMBED Equation.3 1415.
13 EMBED Equation.3 1415; 13 EMBED Equation.3 1415, 13 EMBED Equation.3 1415.

18
13 EMBED Equation.3 1415; 13 EMBED Equation.3 1415, 13 EMBED Equation.3 1415.
13 EMBED Equation.3 1415; 13 EMBED Equation.3 1415, 13 EMBED Equation.3 1415.

19
13 EMBED Equation.3 1415; 13 EMBED Equation.3 1415, 13 EMBED Equation.3 1415
13 EMBED Equation.3 1415; 13 EMBED Equation.3 1415, 13 EMBED Equation.3 1415

20
13 EMBED Equation.3 1415;13 EMBED Equation.3 1415, 13 EMBED Equation.3 1415
13 EMBED Equation.3 1415;13 EMBED Equation.3 1415, 13 EMBED Equation.3 1415

21
13 EMBED Equation.3 1415; 13 EMBED Equation.3 1415, 13 EMBED Equation.3 1415.
13 EMBED Equation.3 1415; 13 EMBED Equation.3 1415, 13 EMBED Equation.3 1415.


Построение треугольника, описанной и вписанной окружностей.

Формулы:
расстояния между двумя точками:
13 EMBED Equation.3 1415, где (x1, y1) и (x2, y2) – это координаты начала и конца отрезка.
Углы треугольника:
cos(ang) = a/(s1*s2), где a – скалярное произведение векторов s1 и s2,а s1 и s2 – стороны треугольника (абсолютные величины векторов).
Площадь треугольника находится с помощью формулы Герона:
Sqr = (p * (p - s1) * (p - s2) * (p - s3)) ^ (1 / 2), где p - полупериметр треугольника.
Радиусы вписанной и описанной окружности.
Rвп = S / p;
Rоп = (s1 * s2 * s3) / (4 * S);

Построение "Паутины Безье»
Построить код для рисования на вкладке паутины Безье разными цветами, исходящих из единого центра. Центр «Паутины Безье» - координаты курсора мыши. При двойном щелчке вкладка должна очищаться.
[ Cкачайте файл, чтобы посмотреть картинку ]
Построение рисунка «Кисти и краски»
Пример: На вкладке RandomShapes должны рисоваться и закрашиваться геометрические фигуры трех разных типов - эллипсы, сектора, прямоугольники. Для каждого типа фигуры используется свой тип кисти: эллипсы закрашиваются градиентной кистью, сектора - сплошной, а прямоугольники - узорной. Цвет фигуры, ее размеры и положение выбираются случайным образом. Рисование фигур должно инициироваться в обработчике события Click. При каждом щелчке кнопкой мыши на форме должно рисоваться три новых экземпляра фигур каждого типа. Старые фигуры не должны стираться
[ Cкачайте файл, чтобы посмотреть картинку ]
Задание.
Запрограммировать элементы динамической графики:

элементы динамической графики

1
Небо, мерцающие звезды, луна и исходящее сияние от нее

2
Семицветик, середина которого через равные промежутки времени 13 EMBED Equation.3 1415 меняет цвет с color1 на color2 и обратно, а лепестки меняют цвет по кругу.

3
Ракета, старт, ее полет по кривой, уменьшение размеров, след от ракеты

4
Движение волн (не меньше 6 волн), плывущая рыбка, небо, солнце

5
Движущийся автомобиль, препятствие, при нажатии клавиши автомобиль должен остановиться. Чем ближе к препятствию он остановится, тем больше очков.

6
Четыре квадрата и одна окружность, быстро и последовательно окрашиваемые в разные цвета. Задача пользователя нажать клавишу «пробел» и тем самым остановить процесс смены цветов в тот момент, когда окружность окрасится в синий цвет

7
Небо, земля, росток с постепенно появляющимися тремя листочками, солнце с играющими лучами

8
Яблоко и ползущая по нему симпатичная гусеница

9
Небо, солнце, дерево, пенек, на пеньке колобок. Колобок скатывается с пенька и укатывается за кадр

10
Горы, солнце садится, наступает ночь, появляются звезды и луна.

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

12
Индикатор процесса: прямоугольник, заполняемый цветом от светлого color1 до темного color2. Время должно устанавливаться пользователем с помощью счетчика. Процесс может быть остановлен клавишей Escape. Процесс может быть запущен клавишей Enter.

13
Зеленая елочка и мерцающие на ней игрушки и гирлянды над ней.

14
Заполнение экрана ломаной линией. Отрезки должны быть разной случайной длины. Угол излома равен ±90(.

15
Заполнение экрана закрашенными пятиугольниками. Стороны разной длины. Координаты вершин должны генерироваться с помощью датчика случайных чисел.

16
Стрельба по мишени. На экране на секунду рисуется круг произвольного диаметра и в произвольном месте. Задача пользователя успеть щелкнуть по нему мышью. Если цель поражена, то прибавление очков пользователю. Остановка игры по клавише Escape.

17
Заполнение экрана крестиками: +’ и (’ разной величины, разного цвета и в разных местах экрана

18
Заполнение экрана фигурами по принципу: максимальной величины закрашенный квадрат, вписанная в него окружность, вписанный в нее ромб, вписанный в ромб квадрат, ., окружность, ромб, квадрат, окружность, .Достигнув некоторого очень маленького размера, все начинается сначала.

19
Дождь или снег (в движении). Пейзаж.

20
Три вложенных друг в друга окружностей с движущимися по ним шариками. По каждой окружности движется со своей скоростью шарик.

21
Небо. Мигающие звезды. При нажатии клавиши Enter, последняя мигнувшая звезда падает под углом ±15(-±30(, оставляя бледный след.


Лабораторная работа № 14
Диаграммы
Для выполнения лабораторной работы необходимы сведения, представленные в п.1.1-1.4, 2, 3.1-3.3, 3.4, 1.7, 3.7
Цель. Приобрести навыки построения диаграмм.
Создать программу со следующими функциями:
Создание с помощью датчика случайных чисел таблицу показателей среднего балла абитуриентов на специальность ПМиИ по математике и русскому.

2005
2006
2007
2008
2009

Математика
55
67
54
64
34

Русский язык
54
34
65
73
48

Средний балл должен принадлежать диапазону [35, 95].
Наличие на панели инструментов команд, позволяющих:
- выводить график с общим средним баллом по математике и русскому языку.
- выводить точечный график с общим средним баллом по математике и русскому.
- выводить два графика (баллы по математике и по русскому) на одной диаграмме;
- строить гистограмму общего среднего балла.
- строить гистограмму по отдельным значениям по математике и русскому языку.
Свойства всех диаграмм:
- наличие заголовков,
- подписей осей,
- отсутствие возможности изменять масштаб.
Наличие цветовой панели для гистограммы и двух графиков с возможностью изменения цветов диаграммы.
Наличие легенды для диаграммы с двумя графиками.
Наличие сеток основной и вспомогательной для диаграммы с одним графиком.
На диаграмме с общим средним баллом найти и подписать минимальное и максимальное значения разными цветами.

Лабораторная работа по Delphi №15.
Диаграммы.
Для выполнения лабораторной работы необходимы сведения, представленные в п.1.1-1.4, 2, 3.1-3.3, 3.4, 1.7, 3.5, 3.7
Цель. Закрепить навыки работы с различными компонентами..
Создать приложение из двух форм:

Первая форма: титульная. На форме вводятся данные студента: фамилия и паспорт. Эти данные должны заноситься в базу данных, если студент открывает программу впервые. По кнопке «Далее» открывается форма для тестирования студента.

Вторая форма. Бланк тестирования.








Опция «Файл» содержит команды Сохранить, Открыть, Выход.
Сохранить – сохранение задач в текстовом файле.
Открыть – открытие задач из текстового файла.
Кнопка Выполнить – запуск теста с автоматически сгенерированными задачами.






















По окончании времени, отведенного на решение теста – подсчет заработанных балов по 10-ти бальной системе и вывод диаграммы по результатам.
Если студент впервые проходил тест, то результат тестирования заносится в базу. Если тестирование было повторным, то выдается сообщение с прежним и новым результатами и предложением сохранить новый результат в базе данных (ОК, Отмена).


















Список литературы
Программирование на JAVA и C# для студента/ О.В.Герман,Ю.О.Герман.- СПб.: БХВ-Петербург, 2005.- 511с.
Объектно-ориентированное программирование: Учебник для вузов/ Г.С.Иванова, Т.Н.Ничушкина, Е.К.Пугачев; Под ред.Г.С.Ивановой.- 2-е изд.,перераб.и доп..- М.: МГТУ, 2003.- 368с.
[ Cкачайте файл, чтобы посмотреть ссылку ]
[ Cкачайте файл, чтобы посмотреть ссылку ]
[ Cкачайте файл, чтобы посмотреть ссылку ]
[ Cкачайте файл, чтобы посмотреть ссылку ]







Юлия Александровна Шичкина



Создание приложений на языке Visual C# в среде программирования Visual Studio

Учебное пособие






Компьютерная верстка Ю.А.Шичкина
Подписано в печать . Формат 60(84
Бумага офсетная. Печать трафаретная.
Усл.печ.л. 8,25. Тираж 100 экз. Заказ

Отпечатано с оригинала автора.

Отпечатано в издательстве ГОУВПО «БрГУ»
665709, Братск, ул.Макаренко,40












13 PAGE \* MERGEFORMAT 144215



Лексема с ошибкой.

Количество ошибок

Двойной щелчок переводит курсор на лексему с ошибкой

Описание ошибки

Координаты ошибки

Щелкните здесь, чтобы открыть панель Задачи

в) результат

б) выбор номера вставляемой строки

исходное окно

TextBox 2

ComboBox 1

TextBox 1


·

Ж

М

УКАЖИТЕ ПОЛ:

ВВЕДИТЕ ИМЯ:

а) исходное состояние; б) выбор строки в) результат

ВАШИ УВЛЕЧЕНИЯ:

музыка

спорт

наука

живопись

ВВЕСТИ

ОЧИСТИТЬ



Здравствуйте, Сережа!
Наша компания рада приветствовать мужчину, увлеченного музыкой.


Сережа

Введите ваши данные:

13 EMBED PBrush 1415

Число:

Число:

(

(

(

(

(

ОЧИСТКА

ВЫЧИСЛИТЬ

Результат: 2*3=6

2

3

Выход

ВЕРНО

Дискриминант

Уровень

Выход

0

1

(

Прог. меню

Панель инстр.

Дано:

x^2+4x-3=0

Введите ответ:

x1=

x2=

Проверить

Далее

Учебник «Квадратные уравнения»

ВЫБЕРИТЕ УРОВЕНЬ СЛОЖНОСТИ:
0: Дискриминант
1: Теорема Виета

ВЫХОД

ВЕРНО

Дискриминант

Уровень

Выход

0

1

(

Прог. меню

Панель инстр.

Дано:

x^2+4x-3=0

Введите ответ:

x1=

x2=

Проверить

Далее



Задание1

Задание2

Очистить

Дано:

Результат:

Вычислить

Отмена



Задание1

Задание2

Введите


число строк:


число столбцов:


Создать:

Автоматически

3

3

Вручную



Введите


а=


b=


Тип результата:

Вычислить

10.2

3.87

Бестиповые указатели

целый

веществ.

Результат: а/b=3



Через «enter» введите 8 целых значений

Введите число элементов списка


Выберите операцию:

8

12

Вычислить

Связные списки

Удаление

Введите номер элемента:

6

Ввод: 1,3,5,7,9,3,9,1
Удаление: 1,3,5,7,9,9,1
Добавление: 1,4,3,.

Журнал операций

Очистить

13 EMBED PBrush 1415

черный

Многострочный текст

текст

Номер строки

Текст строки

Цвет текста

Размер шрифта




Снимок экрана VisualStudioEllipsesButtonСнимок экрана VisualStudioEllipsesButtonПредупреждающее замечаниеRoot EntryEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeПаутина БезьеРисование кистями разного типаEquation Native

Приложенные файлы

  • doc 14703684
    Размер файла: 5 MB Загрузок: 4

Добавить комментарий