public decimal CalculateThisPercentage()




{

decimal percentage = (this.myScore / this.total) * 100;

return percentage;

}

 

static void Main()

{

// Использование метода «static» для расчета процентной доли без какого-либо экземпляра

Console.WriteLine(" 123/200 = " + SchoolTest.CalculateAnyPercentage (123, 200));

 

// Создание нового экземпляра SchoolTest, подстановка в результаты

SchoolTest t = new SchoolTest (" Geography ", 12, 60);

 

// Использование метода «instance» для расчета процентной доли этого экземпляра

Console.WriteLine(" Percentage for test = " + t.CalculateThisPercentage ());

 

// Ожидаем нажатия клавиши ВВОД

Console.ReadLine();

}

}

 

Обратите внимание, мы применили два очень похожих метода. Оба они рассчитывают процентные доли, но используются по-разному. Метод со словом «static» можно использовать без объявления экземпляра new SchoolTest(), в то время как другой может работать ТОЛЬКО с экземпляром. В приведенном выше примере наш экземпляр имеет имя «t».

Можно сказать, что методы «static» работают где угодно, в то время как методы с экземплярами могут действовать только при наличии фактического объекта, и более того, только внутри него.

Структура приложений Windows Forms

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

using System.Windows.Forms;

 

class SimpleWindowsApp: Form

{

// Метод-конструктор

 

public SimpleWindowsApp ()

{

this.Text = " Очень простая форма ";

}

 

// Точка входа для программы

 

static void Main()

{

Application.Run(new SimpleWindowsApp ());

}

}

 

В этом примере использовались два новых элемента:

  1. Часть «: Form»

Здесь говорится: «мой класс наследует все объекты из класса Form». Этот очень важный секрет раскрывается в главе «Наследование». Разработчиками корпорации Microsoft написан большой набор классов, которым известно как создавать кнопки, меню, рамки изображений, независимые кнопки и другие элементы, которые можно использовать в приложениях. Путем простого добавления «: Form» ваш собственный класс сразу получает доступ ко всем таким элементам.

  1. Строка «Application.Run». Это обычный способ запуска приложений форм Windows. Этот метод «выполняет» приложение. В него подставляется новый экземпляр вашего класса.

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

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

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

Наиболее важная библиотека по C# это библиотека классов Microsoft «.NET Framework Class Library». Любую полезную программу не напишешь без использования этой библиотеки. Часть IV нашей книги посвящена исключительно ей. При установке.NET Framework на компьютере она загружается автоматически и становится доступной для ваших программ. Нужно научиться пользоваться библиотекой и использовать ее в своих программах.

Пример

Раздел «System.Drawing» библиотеки классов.NET Framework Class Library содержит много полезных классов для работы с изображениями. Давайте посмотрим, что можно взять из него, чтобы продемонстрировать возможность использования чужого кода в своей программе.

Класс System.Drawing.Image имеет метод под названием RotateFlip, который позволяет вращать (поворачивать) или переворачивать (отражать) любое подставляемое изображение. Допустим, вы решили использовать этот метод в своей программе. Программа должна загружать файл изображения с диска, переворачивать его по горизонтали и сохранять копию перевернутого изображения обратно на диск. Рассмотрим один из возможных способов. Ниже приводится законченная, рабочая программа. (Если будете экспериментировать, обратите внимание, что программа 9 из набора примеров к этой книге, содержит аналогичный код.)

class PhotoSizer

{

public PhotoSizer()

{

// Загрузка фотографии с диска в память компьютера

System.Drawing.Image img;

img = new System.Drawing.Bitmap(@"d:\samples\myDog.jpg");

 

// Переворачивание изображения по горизонтали

img.RotateFlip(System.Drawing.RotateFlipType.RotateNoneFlipX);

 

// Сохранение перевернутой фотографии в другой файл на диске

img.Save(@"d:\samples\myDogFlipped.jpg");

}

 

static void Main()

{

PhotoSizer p = new PhotoSizer();

}

}

 

Небольшое примечание к символу «@»:

Символ @ в языке C#, использованный выше, можно добавлять в начало строки для «подстановки» или пропуска символов обратной косой черты, если в указании пути содержатся специальные символы, такие как обратная косая черта. Символы обратной черты могут нарушить выполнение кода C#, поскольку имеют особое значение. Обычно путь указывается с помощью двойной обратной косой черты (d:\\samples\\myDog.jpg), а символ «@» позволяет избежать этого.)

В приведенном выше примере мы использовали класс «Image» из библиотеки «System.Drawing».

После создания объекта Image мы вызываем два метода класса изображения. Названия методов RotateFlip и Save.

Более простой вариант

Можно заметить, что каждый раз, когда необходимо описать что-то в пространстве System.Drawing, требуется снова писать эти длинные слова. Чтобы этого избежать можно в начале программы при помощи ключевого слова «using» один раз сообщить о том, что из пространства имен System.Drawing будут использоваться несколько элементов, а также несколько элементов из пространства имен System.Drawing.Imaging.

using System.Drawing;

 

using System.Drawing.Imaging;

 

class PhotoSizer

{

public PhotoSizer()

{

// Загрузка фотографии с диска в память компьютера

Image img = new Bitmap(@"d:\samples\myDog.jpg");

 

// Переворачивание изображения по горизонтали

img.RotateFlip(RotateFlipType.RotateNoneFlipX);

 

// Сохранение перевернутой фотографии в другой файл на диске

img.Save(@"d:\samples\myDogFlipped.jpg");

}

 

static void Main()

{

PhotoSizer p = new PhotoSizer();

}

}

 

Замечание о ссылках в C# Express

При создании проекта в C# Express необходимо создать так называемую «ссылку» на файл библиотеки классов с кодом библиотеки, который требуется использовать (эти файлы имеют расширение «.dll» — Dynamic Link Library). К счастью, наиболее распространенные ссылки добавляются автоматически.

Например, на рисунке ниже показаны ссылки, добавляемые при создании проекта «Windows Application». Visual C# Express выбирает разделы библиотеки, которые предположительно могут использоваться для такого приложения.

В приведенном выше примере можно заметить, что классы пространства имен System.Drawing хранятся в файле System.Drawing.dll.

Если ссылка на раздел библиотеки, который вы планируете использовать, не была включена автоматически, ее нужно добавить самостоятельно. Допустим, вы нашли пример кода с классом System.Web.HttpRequest для получения некоторой информации с веб-сервера и хотите проверить его. Нужно щелкнуть References («Ссылки»), выбрать Add reference(«Добавить ссылку») и затем выбрать раздел библиотеки System.Web. Теперь вы обнаружите, что классы библиотеки можно использовать в своем коде.

Заключение

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

Именно поэтому в IV части книги будет рассказано о некоторых полезных разделах библиотеки классов Microsoft.NET Framework.

 

C# для вундеркиндов. Часть 4. Программирование в.NET Framework

Visual Studio 2005

Февраль 2007 г.

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

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

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

При написании программы на языке 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 включен класс для быстрого написания консольных приложений.

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

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

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

  1. Console.ReadLine — считывает строку символов, введенную с клавиатуры (или иного устройства ввода)
  2. Console.Read — считывает число, введенное с клавиатуры (или иного устройства ввода)
  3. Console.WriteLine — выводит текст на экран (или иное устройство вывода), начиная с новой строки
  4. 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 имеется для этого немало полезных средств.

Пример программы 8

Эта программа находит изображение (в данном случае файл JPEG) на диске и отображает его на форме.

Для этого нам понадобится какой-либо элемент управления, позволяющий отображать изображения. PictureBox прекрасно подходит для этой цели.

Код программы 8
  using System; using System.Windows.Forms; using System.Drawing;   class PictureDisplayer: Form { Bitmap image1; PictureBox pictureBox1;   // Метод-конструктор нашего класса public PictureDisplayer() { // Указываем размеры и заголовок окна   this.Text = "Picture Displayer"; this.Size = new Size(302, 240);   // Подготавливаем поле для размещения изображения   pictureBox1 = new PictureBox(); pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage; pictureBox1.BorderStyle = BorderStyle.Fixed3D; pictureBox1.ClientSize = new Size(300, 196);   // Добавляем изображение в элемент PictureBox   image1 = new Bitmap(@"../../images/lama.jpg"); pictureBox1.Image = (Image)image1;   // Добавляем PictureBox (с изображением) на форму   this.Controls.Add(pictureBox1);   }   static void Main() { // Запускаем новый экземпляр приложения Windows Forms при помощи вышеописанного класса Application.Run(new PictureDisplayer()); }   }  

Пример программы 9

Следующая программа загружает фотографию с диска и после нажатия кнопки «flip» (Перевернуть) позволяет получить ее зеркальное отражение по горизонтали.

Код программы 9
  using System; using System.Windows.Forms; using System.Drawing;   class PictureFlipper: Form { Button button1; Bitmap image1; PictureBox pictureBox1;   // Метод-конструктор нашего класса public PictureFlipper() { // Указываем размеры и заголовок окна   this.Text = "Picture Flipper"; this.Size = new Size(302, 240);   // Добавляем на форму кнопку   button1 = new Button(); button1.Text = "Flip"; button1.Location = new Point(100, 150); button1.Click += new System.EventHandler(button1_Click); this.Controls.Add(button1);   // Добавляем элемент PictureBox на форму   pictureBox1 = new PictureBox(); pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage; pictureBox1.BorderStyle = BorderStyle.Fixed3D; pictureBox1.ClientSize = new Size(300, 196);   // Добавляем изображение в элемент PictureBox   image1 = new Bitmap(@"../../images/elephants.jpg"); pictureBox1.Image = (Image)image1;   // Добавляем элемент Pict


Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-04-28 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: