Программировать на языке C# без .NET Framework — это все равно, что писать ручкой без пасты. Как ни води ею по бумаге, написать все равно ничего не удастся.

Так что же такое .NET Framework? Это платформа программирования, разработанная корпорацией Microsoft. C# создавался как язык, предназначенный специально для .NET Framework. Платформа .NET Framework состоит из двух частей:

Во-первых, она включает огромную библиотеку классов, которые можно вызывать из программ на C#. Это избавляет от необходимости писать все самому.

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

При написании программы на языке C# (или на любом другом языке .NET) наряду с написанием собственного кода вызываются классы, хранящиеся в библиотеке.

Библиотека .NET framework содержит такое количество классов, и некоторые из них настолько сложны, что мы даже не будем пытаться рассмотреть здесь все сразу. Вместо этого, в главах раздела мы расскажем только о некоторых классах .NET framework, которые на наш взгляд, будут для вас наиболее полезными. Со временем вы станете замечать, что есть классы, которыми вы пользуетесь чаще, чем другими. Такие классы вы постепенно освоите хорошо, ведь когда часто берешь любимую книгу в библиотеке, то тоже скоро запоминаешь, на какой полке ее искать.

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

Каждый раз, когда, читая эти главы, вы встречаете отрывок текста, перед которым указано «код программы ...», вы можете использовать этот код для запуска в Visual C# Express. Хотя большинство приведенных примеров очень невелики по размеру, все они являются полноценными, действующими программами. Для их запуска обычно необходимо выполнить следующие действия.

Запустите Visual C# Express. В меню File(«Файл») выберите команду Open project(«Открыть проект»), а затем перейдите к месту сохранения примеров программ. Откройте любой файл с расширением «.csproj».

(Либо можно найти нужный пример с помощью проводника Windows и затем просто дважды щелкнуть файл .csproj.)

Чтобы запустить программу, нажмите клавишу F5 (или щелкните мышью кнопку с зеленой стрелкой)

Как изменять образцы программ и расширять их возможности
Легко сказать: изменить программу, — можете подумать вы, — но откуда мне знать, в каком направлении ее можно изменить? В приведенных примерах используются лишь некоторые методы и классы .NET Framework, и как же узнать, какие еще методы и классы существуют? А узнать это можно несколькими способами.

Вы можете просмотреть библиотеку классов .NET Framework SDK, которая включена в справочную систему Visual C# Express.

Работая в Visual C# Express, нажмите клавишу «.» сразу после ввода имени пространства имен или класса и увидите список всех доступных для него классов, методов, полей и т.д. Например, введите слово «Console.» и увидите список методов и других членов класса Console.

В случае с методом, если поставить открывающую скобку после имени метода, то можно увидеть типы параметров, которые он может принимать. Зачастую в C# используются одноименные методы с различными наборами параметров — в этом случае их список можно прокручивать при помощи клавиш со стрелками вверх и вниз. В следующем примере показано что произойдет, если набрать «Console.WriteLine(». Visual C# Express подскажет вам о существовании 19 различных способов вызова метода WriteLine. Мы прокрутили список при помощи клавиши со стрелкой вниз до 11-ой позиции (см. рисунок ниже).

Введение
Понятие «консоль» пришло к нам из тех времен, когда были популярны большие компьютеры, называвшиеся мэйнфреймами. У компании был один такой гигантский компьютер, который размещался в каком-нибудь отдельном помещении, а у служащих на рабочих местах устанавливалась только клавиатура и простенький монитор, называвшийся консолью. Клавиатура и монитор подключались к тому самому огромному «монстру», спрятанному от посторонних глаз в отдельной комнате. Такие мониторы не умели отображать графику — только текст. Клавиатура была основным устройством ввода, служащим для передачи информации в компьютер, а консоль являлась основным устройством вывода, позволявшим компьютеру представлять информацию пользователю.

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

Однако при выполнении многих задач не требуется никаких графических изысков. Например, программа, получающая какие-либо данные с сервера в Интернете и сохраняющая их в файле на вашем компьютере должна уметь выводить только два сообщения: «идет получение данных» и «готово». Зачем тратить время на разработку затейливого пользовательского интерфейса, который к тому же занимает много памяти? Именно по этой причине в библиотеку .NET включен класс для быстрого написания консольных приложений.

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

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

Некоторые полезные методы

Console.ReadLine — считывает строку символов, введенную с клавиатуры (или иного устройства ввода)

Console.Read — считывает число, введенное с клавиатуры (или иного устройства ввода)

Console.WriteLine — выводит текст на экран (или иное устройство вывода), начиная с новой строки

Console.Write — выводит на экран ряд символов без перехода на новую строку

Пример программы 1
Следующая программа просто выводит на экран слово «Yo!» и после этого ожидает нажатия клавиши ВВОД.

Код программы 1

                            using System;

                            class PleaseSayYo
                            {
                            static void Main()
                            {
                            // Выводим слово на экран
                            Console.Write("Yo!");

                            // Ожидаем нажатия клавиши ВВОД
                            Console.ReadLine();
                            }
                            }
                         

Пример программы 2
Следующая программа:

просит пользователя ввести с клавиатуры слово;

спрашивает пользователя, сколько раз это слово должно быть выведено на экран;

выводит на экран введенное слово указанное количество раз, причем каждый раз с новой строки.

Код программы 2

                            using System;

                            class WriteAFewLines
                            {
                            static void Main()
                            {
                            Console.WriteLine("Type in your favourite word : ");

                            // Сохраняем в строковой переменной введенное пользователем слово
                            string favouriteWord = Console.ReadLine();

                            Console.WriteLine("How many times shall I write it? ");

                            // Сохраняем в целочисленной переменной введенное число
                            // (При неправильном вводе числа произойдет ошибка)
                            int numberOfTimes = Convert.ToInt32(Console.ReadLine());

                            // Выводим на экран слово указанное количество раз

                            for (int i = 0; i < numberOfTimes; i++)
                            {
                            Console.WriteLine(favouriteWord);
                            }

                            // Ожидаем нажатия клавиши ВВОД
                            Console.ReadLine();
                            }
                            }
                         

Введение
Если вы хотите писать программы, похожие на привычные приложения Windows, вам наверняка понадобятся классы из пространства имен System.Windows.Forms. Они позволяют использовать кнопки, списки, текстовые поля, меню, окна сообщений и множество других «элементов управления». Элементы управления — это то, что вы помещаете на форму. Они могут использоваться для вывода информации, например текстовой (элемент управления Label) или графической (элемент управления PictureBox) или для выполнения определенных действий, например выбора значения или перехода к другой форме после нажатия кнопки. Возможно, вы будете использовать классы из System.Windows.Forms в большинстве своих программ на C#.

Очевидно, что понятие «формы» в программировании родственно понятию «формы анкеты» или «формы документа» в обычной жизни. Форма — это то, на чем можно расположить различные элементы (текст, картинки, поля для заполнения и т.д.) в определенном порядке. Работая с формой, мы обычно читаем некоторую информацию, а затем заполняем определенные области.

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

Корпорация Microsoft предоставила в составе библиотеки классов .NET Framework огромное количество «элементов управления», которые можно помещать на формы. С помощью них вы сможете очень быстро создавать эффектные приложения, как только научитесь размещать их на форме.

Некоторые полезные классы из пространства имен System.Windows.Forms
Ниже приведены примеры классов элементов управления, которые можно размещать на формах.

Label (Метка)

Button (Кнопка)

ListBox (Список)

CheckBox (Флажок)

RadioButton (Переключатель)

MessageBox (Окно сообщений)

Menu (Меню)

TabControl (Управление вкладками)

Toolbar (Панель инструментов)

TreeView (Дерево)

DataGrid (Сетка данных)

PictureBox (Изображение)

RichTextBox (Текстовое поле с поддержкой формата RTF)

Примечание.
Работа с примерами программ Windows Forms в Visual C# Express
Чтобы поэкспериментировать с приведенными ниже примерами в C# Express, можно выбрать в меню File(«Файл») команду Open project(«Открыть проект») и открыть один из примеров программ в виде файла .csproj.

Если же вы все-таки предпочтете набрать их самостоятельно «с нуля», вы должны учесть, что при создании нового проекта «Windows Application» (Приложение Windows) C# Express создает два файла .cs (с именами Form1.cs и Program.cs) и вставляет несколько исходных строк кода на языке C#. Таким образом, вы получаете простейшую, но полноценную программу. Чтобы упростить работу с приведенными ниже примерами, возможно, понадобится выполнить следующие действия.

Удалите файл Form1.cs.

Замените код в файле Program.cs на код примера, с которым вы работаете.

В этом нет необходимости, если вы открываете программы с помощью команды «Открыть проект» в меню «Файл».

Пример программы 3
Перед вами пример простейшего приложения Windows Forms. Все, что оно умеет, это создавать новую форму и выводить определенный текст в заголовок окна.

Код программы 3

                            using System.Windows.Forms;

                            class SimpleWindowsForm : Form
                            {
                            // Метод-конструктор нашего класса
                            public SimpleWindowsForm()
                            {
                            // Указываем заголовок окна
                            this.Text = "A really Simple Form";
                            }

                            static void Main()
                            {
                            // Запускаем новый экземпляр приложения Windows Forms при помощи вышеописанного класса
                            Application.Run(new SimpleWindowsForm());
                            }
                            }
                         

Пример программы 4
Этот пример тоже достаточно прост, но здесь мы делаем шаг вперед — размещаем на форме кнопку

Код программы 4

                            using System.Windows.Forms;

                            class SimpleWindowsFormWithButton : Form
                            {
                            Button button1;

                            // Метод-конструктор нашего класса
                            public SimpleWindowsFormWithButton()
                            {
                            // Указываем заголовок окна
                            this.Text = "A simple form with a button";

                            // Добавляем кнопку в коллекцию элементов управления формы
                            // Хотя на кнопке написано: "Click me" (Нажми меня), при нажатии ничего не происходит!

                            button1 = new Button();
                            button1.Text = "Click me";
                            this.Controls.Add(button1);
                            }

                            static void Main()
                            {
                            // Запускаем новый экземпляр приложения Windows Forms при помощи вышеописанного класса
                            Application.Run(new SimpleWindowsFormWithButton());
                            }
                            }
                         

Пример программы 5
То, что мы поместили на форму кнопку, уже хорошо, но в предыдущем примере при нажатии на кнопку ничего не происходит. Это неинтересно.

Нам нужно описать метод, который будет выполнять какое-либо действие при нажатии кнопки. Пусть при этом будет меняться текст в заголовке окна. Поскольку такой метод отслеживает наступление некоторого события (в нашем случае это нажатие кнопки) и затем каким-то образом обрабатывает его, он называется «обработчик события». Кроме того, нам понадобится привязать обработчик события к соответствующему событию, то есть к нажатию кнопки.

Код программы 5

                            using System;
                            using System.Windows.Forms;
                            using System.Drawing;

                            class FormWithWorkingButton : Form
                            {
                            // Метод-конструктор нашего класса
                            public FormWithWorkingButton()
                            {
                            // Указываем заголовок окна
                            this.Text = "Simple form with working button";

                            // Добавляем кнопку и привязываем ее к обработчику события

                            Button button1 = new Button();
                            button1.Text = "Click me";
                            button1.Click += new System.EventHandler(Button1_Click);
                            this.Controls.Add(button1);

                            }

                            static void Main()
                            {
                            // Запускаем новый экземпляр приложения Windows Forms при помощи вышеописанного класса
                            Application.Run(new FormWithWorkingButton());
                            }

                            // Обработчик события, срабатывающий при нажатии кнопки
                            void Button1_Click(object sender, EventArgs e)
                            {
                            // Изменяем заголовок окна
                            this.Text = "Button was clicked";
                            }
                            }
                         
                           
                         

Пример программы 6
Прекрасно, наша программа умеет выполнять основные действия. Теперь добавим на форму несколько новых элементов управления, аккуратно разместим их и немного поработаем с ними. Возьмем элементы управления 4-х типов: Button, ListBox, MessageBox и PictureBox.

Обратите внимание, что кроме System.Windows.Forms в этом примере упоминается пространство имен System.Drawing. Это необходимо из-за использования элемента управления PictureBox — для работы с изображениями требуются классы Drawing.

Код программы 6

                            using System.Windows.Forms;
                            using System.Drawing;

                            class MyForm : Form
                            {
                            // Объявим элемент ListBox вне определения методов, поскольку
                            // нам придется обращаться к нему из разных методов
                            ListBox listBox1;

                            // Метод-конструктор нашего класса
                            public MyForm()
                            {
                            // Создадим элемент PictureBox, поместим в него изображение и добавим его на форму

                            PictureBox pictureBox1 = new PictureBox();
                            pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
                            Bitmap image1 = new Bitmap("../../images/seashore.jpg");
                            pictureBox1.ClientSize = new Size(this.Width, 100);
                            pictureBox1.Image = (Image)image1;
                            this.Controls.Add(pictureBox1);

                            // Создаем объект Button, определяем некоторые из его свойств и добавляем его на форму

                            Button button1 = new System.Windows.Forms.Button();
                            button1.Location = new System.Drawing.Point(10, 120);
                            button1.Text = "Click me";
                            button1.Click += new System.EventHandler(button1_Click);
                            this.Controls.Add(button1);

                            // Создаем объект ListBox, определяем некоторые из его свойств и добавляем его на форму

                            listBox1 = new System.Windows.Forms.ListBox();
                            listBox1.Location = new System.Drawing.Point(10, 160);

                            listBox1.Items.Add("Sparkly");
                            listBox1.Items.Add("Dull");
                            listBox1.Items.Add("Vivacious");
                            listBox1.Items.Add("Plain");
                            listBox1.Items.Add("Outstanding");

                            listBox1.SelectedIndex = 3;

                            this.Controls.Add(listBox1);
                            }

                            // Обработчик события, срабатывающий при нажатии кнопки
                            void button1_Click(object sender, System.EventArgs e)
                            {
                            // Выводим сообщение с указанием выбранного в списке пункта
                            MessageBox.Show(this, "You have selected " + listBox1.SelectedItem, "Notification", MessageBoxButtons.OK);
                            }

                            static void Main()
                            {
                            // Запускаем новый экземпляр приложения Windows Forms при помощи вышеописанного класса
                            Application.Run(new MyForm());
                            }
                            }
                         

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

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

Обратите внимание, что для того чтобы использовать элементы управления PictureBox и DataGridView особым образом, потребуются пространства имен System.Drawing, System.Data и System.Xml.

Код программы 7

                            using System;
                            using System.Windows.Forms;
                            using System.Drawing;
                            using System.Data;
                            using System.Xml;

                            class FormWithManyControls : Form
                            {
                            TreeView treeView1;
                            Panel panel1;
                            CheckBox checkBox1, checkBox2;
                            RadioButton radiobutton1, radioButton2;
                            ListBox listBox1;

                            // Метод-конструктор нашего класса
                            public FormWithManyControls()
                            {
                            // Указываем размеры и заголовок окна

                            this.Text = "A form dealing with many types of controls";
                            this.Width = 700;
                            this.Height = 500;

                            // Добавляем элемент TreeView в качестве своеобразного меню

                            treeView1 = new TreeView();
                            treeView1.BackColor = Color.BurlyWood;
                            treeView1.Dock = DockStyle.Left;
                            treeView1.AfterSelect +=
                            new System.Windows.Forms.TreeViewEventHandler(treeView1_AfterSelect);

                            TreeNode tn = new TreeNode("Элементы");
                            tn.Expand();

                            tn.Nodes.Add(new TreeNode("[Очистить]"));
                            tn.Nodes.Add(new TreeNode("Label"));
                            tn.Nodes.Add(new TreeNode("Button"));
                            tn.Nodes.Add(new TreeNode("CheckBox"));
                            tn.Nodes.Add(new TreeNode("RadioButton"));
                            tn.Nodes.Add(new TreeNode("ListBox"));
                            tn.Nodes.Add(new TreeNode("TextBox"));
                            tn.Nodes.Add(new TreeNode("TabControl"));
                            tn.Nodes.Add(new TreeNode("DataGridView"));
                            tn.Nodes.Add(new TreeNode("MainMenu"));
                            tn.Nodes.Add(new TreeNode("ToolBar"));
                            tn.Nodes.Add(new TreeNode("PictureBox"));
                            tn.Nodes.Add(new TreeNode("RichTextBox"));

                            treeView1.Nodes.Add(tn);

                            this.Controls.Add(treeView1);

                            // Добавляем панель для размещения остальных элементов управления

                            panel1 = new Panel();
                            panel1.Dock = DockStyle.Right;
                            panel1.BorderStyle = BorderStyle.Fixed3D;
                            panel1.Width = this.Width - treeView1.Width;

                            this.Controls.Add(panel1);
                            }

                            // Обработчик событий, срабатывающий при выборе одного из узлов дерева TreeView
                            private void treeView1_AfterSelect
                            (object sender, System.Windows.Forms.TreeViewEventArgs e)
                            {
                            // Выполнение соответствующего действия при выборе любого из узлов

                            if (e.Node.Text == "[Wipe clean]")
                            {
                            // Удаляем с панели все элементы управления
                            panel1.Controls.Clear();
                            }
                            else if (e.Node.Text == "Button")
                            {
                            // Добавляем на панель кнопку

                            Button button1 = new Button();
                            button1.Text = "I'm a button";
                            button1.Location = new Point(150, 80);
                            button1.Click += new EventHandler(button1_Click);

                            panel1.Controls.Add(button1);
                            }
                            else if (e.Node.Text == "Label")
                            {
                            // Добавляем на панель метку

                            Label label1 = new Label();
                            label1.Text =
                            "This is a label. Labels are simply used " +
                            "to write text at a point on the screen";
                            label1.Location = new Point(150, 10);
                            label1.Width = 400;
                            label1.Click += new EventHandler(label1_Click);

                            panel1.Controls.Add(label1);
                            }
                            else if (e.Node.Text == "CheckBox")
                            {
                            // Добавляем на панель несколько флажков

                            checkBox1 = new CheckBox();
                            checkBox1.Text = "I am sharp";
                            checkBox1.Location = new Point(10, 50);
                            checkBox1.CheckedChanged +=
                            new EventHandler(CheckBox_CheckedChanged);
                            panel1.Controls.Add(checkBox1);

                            checkBox2 = new CheckBox();
                            checkBox2.Text = "I am modest";
                            checkBox2.Location = new Point(10, 70);
                            checkBox2.CheckedChanged +=
                            new EventHandler(CheckBox_CheckedChanged);
                            panel1.Controls.Add(checkBox2);
                            }
                            else if (e.Node.Text == "RadioButton")
                            {
                            // Добавляем на панель несколько переключателей

                            radiobutton1 = new RadioButton();
                            radiobutton1.Text = "I am sharp";
                            radiobutton1.Location = new Point(370, 210);
                            radiobutton1.CheckedChanged +=
                            new EventHandler(RadioButton_CheckedChanged);

                            panel1.Controls.Add(radiobutton1);

                            radioButton2 = new RadioButton();
                            radioButton2.Text = "I am dim-witted";
                            radioButton2.Location = new Point(370, 230);
                            radiobutton1.CheckedChanged +=
                            new EventHandler(RadioButton_CheckedChanged);

                            panel1.Controls.Add(radioButton2);
                            }
                            else if (e.Node.Text == "ListBox")
                            {
                            // Добавляем на панель список

                            listBox1 = new ListBox();
                            listBox1.Items.Add("Green");
                            listBox1.Items.Add("Beige");
                            listBox1.Items.Add("White");
                            listBox1.Location = new Point(200, 180);
                            listBox1.SelectedIndexChanged +=
                            new EventHandler(listBox1_SelectedIndexChanged);

                            panel1.Controls.Add(listBox1);
                            }
                            else if (e.Node.Text == "TextBox")
                            {
                            // Добавляем на панель текстовое поле

                            TextBox TextBox1 = new TextBox();
                            TextBox1.Text = "You can type here";
                            TextBox1.Location = new Point(10, 110);

                            panel1.Controls.Add(TextBox1);
                            }
                            else if (e.Node.Text == "DataGridView")
                            {
                            // Добавляем на панель таблицу, заполненную данными из файла xml

                            DataSet dataSet1 = new DataSet("A sample DataSet");
                            dataSet1.ReadXml("../../data/grades.xml");

                            DataGridView dataGridView1 = new DataGridView();
                            dataGridView1.Width = (panel1.Width / 2) - 10;
                            dataGridView1.Height = 150;
                            dataGridView1.Location =
                            new Point(2, panel1.Height - dataGridView1.Height - 5);

                            dataGridView1.DataSource = dataSet1;
                            dataGridView1.DataMember = "subject";
                            panel1.Controls.Add(dataGridView1);

                            }
                            else if (e.Node.Text == "TabControl")
                            {
                            // Добавляем на панель элемент управления вкладками
                            // и наполняем каждую вкладку содержимым

                            TabControl tabControl1 = new TabControl();
                            tabControl1.Location = new Point(10, 150);
                            tabControl1.Size = new Size(165, 146);

                            TabPage tabPage1 = new TabPage("Robynne");
                            PictureBox pictureBox1 = new PictureBox();
                            pictureBox1.Image = new Bitmap("../../images/robynne.jpg");
                            pictureBox1.Size = new Size(160, 120);
                            tabPage1.Controls.Add(pictureBox1);
                            tabControl1.TabPages.Add(tabPage1);

                            TabPage tabPage2 = new TabPage("Her Dog");
                            PictureBox pictureBox2 = new PictureBox();
                            pictureBox2.Image = new Bitmap("../../images/chocolate.jpg");
                            pictureBox2.Size = new Size(160, 120);
                            tabPage2.Controls.Add(pictureBox2);
                            tabControl1.TabPages.Add(tabPage2);

                            TabPage tabPage3 = new TabPage("Info");
                            tabPage3.BackColor = Color.White;
                            Label label1 = new Label();
                            label1.Text =
                            "Robynne lives in Cape Town, South Africa.\n\n" +
                            "She has a dog named Chocolate, from the planet Woof," +
                            " rapidly growing into her oversized ears.";
                            label1.Dock = DockStyle.Fill;
                            tabPage3.Controls.Add(label1);
                            tabControl1.TabPages.Add(tabPage3);

                            panel1.Controls.Add(tabControl1);
                            }
                            else if (e.Node.Text == "PictureBox")
                            {
                            // Добавляем на панель изображение

                            PictureBox pictureBox1 = new PictureBox();
                            pictureBox1.Image = new Bitmap("../../images/ocean.jpg");
                            pictureBox1.BorderStyle = BorderStyle.Fixed3D;
                            pictureBox1.Location = new Point(250, 25);
                            pictureBox1.Size = new Size(300, 130);

                            panel1.Controls.Add(pictureBox1);
                            }
                            else if (e.Node.Text == "RichTextBox")
                            {
                            // Добавляем поле для ввода текста с форматированием
                            // Загружаем в него данные из файла XML

                            RichTextBox richTextBox1 = new RichTextBox();
                            richTextBox1.LoadFile("../../data/grades.xml",
                            RichTextBoxStreamType.PlainText);
                            richTextBox1.WordWrap = false;
                            richTextBox1.BorderStyle = BorderStyle.Fixed3D;
                            richTextBox1.BackColor = Color.Beige;
                            richTextBox1.Size = new Size((panel1.Width / 2) - 10, 150);
                            richTextBox1.Location =
                            new Point((panel1.Width / 2) + 10,
                            panel1.Height - richTextBox1.Height - 5);

                            panel1.Controls.Add(richTextBox1);
                            }
                            else if (e.Node.Text == "MainMenu")
                            {
                            // Добавляем классическое «меню» (появляется в верхней части окна)
                            MainMenu mainMenu1 = new MainMenu();

                            MenuItem menuItem1 = new MenuItem("File");
                            menuItem1.MenuItems.Add("Exit",
                            new EventHandler(mainMenu1_Exit_Select));
                            mainMenu1.MenuItems.Add(menuItem1);

                            MenuItem menuItem2 = new MenuItem("Background");
                            menuItem2.MenuItems.Add("Choose",
                            new EventHandler(mainMenu1_ColorOwn_Select));
                            menuItem2.MenuItems.Add("White",
                            new EventHandler(mainMenu1_ColorWhite_Select));
                            mainMenu1.MenuItems.Add(menuItem2);

                            this.Menu = mainMenu1;

                            MessageBox.Show("A main menu has been added at the top " +
                            "left of the window. Try it out after clicking OK.");

                            }
                            else if (e.Node.Text == "ToolBar")
                            {
                            // Добавляем на панель элемент "панель управления" с кнопками быстрого вызова

                            ToolBar toolBar1 = new ToolBar();
                            ImageList imageList1 = new ImageList();
                            imageList1.Images.Add(new Bitmap("../../images/open.gif"));
                            imageList1.Images.Add(new Bitmap("../../images/close.gif"));
                            imageList1.Images.Add(new Bitmap("../../images/undo.gif"));
                            toolBar1.ImageList = imageList1;

                            ToolBarButton toolBarbutton1 = new ToolBarButton("Open");
                            toolBarbutton1.ImageIndex = 0;
                            toolBar1.Buttons.Add(toolBarbutton1);

                            ToolBarButton toolBarbutton2 = new ToolBarButton("Close");
                            toolBarbutton2.ImageIndex = 1;
                            toolBar1.Buttons.Add(toolBarbutton2);

                            ToolBarButton toolBarButton3 = new ToolBarButton("Huh");
                            toolBarButton3.ImageIndex = 3;
                            toolBar1.Buttons.Add(toolBarButton3);

                            toolBar1.ButtonClick +=
                            new ToolBarButtonClickEventHandler(toolBar1_Click);

                            panel1.Controls.Add(toolBar1);
                            }

                            }

                            /* Обработчики событий для добавленных выше элементов управления */

                            // Обработчик события, срабатывающий при щелчке мышью на метке
                            void label1_Click(object sender, System.EventArgs e)
                            {
                            MessageBox.Show
                            ("Yes, labels can be clicked, although it's not normal to do so.");
                            }

                            // Обработчик события, срабатывающий при нажатии кнопки
                            void button1_Click(object sender, System.EventArgs e)
                            {
                            MessageBox.Show("Yup, you were supposed to click me");
                            }

                            // Обработчик события, срабатывающий при установке или снятии флажка
                            void CheckBox_CheckedChanged(object sender, System.EventArgs e)
                            {
                            if (checkBox1.Checked && checkBox2.Checked)
                            {
                            MessageBox.Show("Good for you");
                            }
                            else if (checkBox1.Checked)
                            {
                            MessageBox.Show("It's not good to be sharp without being modest");
                            }
                            else if (checkBox2.Checked)
                            {
                            MessageBox.Show("Modesty is good. Pity you're not sharp too.");
                            }
                            else
                            {
                            MessageBox.Show("Oh dear, neither sharp nor modest eh?");
                            }
                            }

                            // Обработчик события, срабатывающий при нажатии переключателя
                            void RadioButton_CheckedChanged(object sender, System.EventArgs e)
                            {
                            if (radiobutton1.Checked)
                            {
                            MessageBox.Show("Glad to hear it");
                            }
                            else if (radioButton2.Checked)
                            {
                            MessageBox.Show("What a shame");
                            }
                            }

                            // Обработчик события, срабатывающий при выборе одного из пунктов списка
                            void listBox1_SelectedIndexChanged(object sender, System.EventArgs e)
                            {
                            if (listBox1.SelectedItem.ToString() == "Green")
                            {
                            treeView1.BackColor = Color.LightSeaGreen;
                            }
                            else if (listBox1.SelectedItem.ToString() == "Beige")
                            {
                            treeView1.BackColor = Color.Beige;
                            }
                            else if (listBox1.SelectedItem.ToString() == "White")
                            {
                            treeView1.BackColor = Color.White;
                            }
                            }

                            // Обработчик события, срабатывающий при выборе в меню пункта "White"
                            void mainMenu1_ColorWhite_Select(object sender, System.EventArgs e)
                            {
                            treeView1.BackColor = Color.White;
                            }

                            // Обработчик события, срабатывающий при выборе в меню цвета
                            void mainMenu1_ColorOwn_Select(object sender, System.EventArgs e)
                            {
                            ColorDialog colorDialog1 = new ColorDialog();
                            colorDialog1.Color = treeView1.BackColor;
                            colorDialog1.ShowDialog();
                            treeView1.BackColor = colorDialog1.Color;
                            }

                            // Обработчик события, срабатывающий при выборе в меню пункта "exit"
                            void mainMenu1_Exit_Select(object sender, System.EventArgs e)
                            {
                            if (
                            MessageBox.Show("Are you sure you want to exit?",
                            "Exit confirmation", MessageBoxButtons.YesNo)
                            == DialogResult.Yes
                            )
                            {
                            this.Dispose();
                            }
                            }

                            // Обработчик события, срабатывающий при нажатии кнопки на панели инструментов
                            void toolBar1_Click
                            (object sender, System.Windows.Forms.ToolBarButtonClickEventArgs e)
                            {
                            if (e.Button.Text == "Open")
                            {
                            MessageBox.Show("This could have opened a file, for example");
                            }
                            else if (e.Button.Text == "Close")
                            {
                            MessageBox.Show("This could have closed a file, for example");
                            }
                            else if (e.Button.Text == "Huh")
                            {
                            MessageBox.Show("Huh?");
                            }
                            }

                            static void Main()
                            {
                            // Запускаем новый экземпляр приложения Windows Forms при помощи вышеописанного класса
                            Application.Run(new FormWithManyControls());
                            }
                            }
                         

Введение
Классы, объединенные в пространство имен Drawing, позволяют работать с различными изображениями. Существует два основных типа компьютерных изображений:

Точечные или растровые;

Векторные.

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

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

Для начала продемонстрируем работу с растровой графикой. На компьютере часто приходится выполнять обработку изображений, например, работать с фотографиями. В библиотеке классов .NET Framework имеется для этого немало полезных средств.