Рисование графических примитивов средствами GDI+
Создание заготовки приложения для выполнения упражнений C#
Прежде всего мы создадим главную форму, позволяющую управлять вызовом дочерних форм для каждого упражнения.
- Перейдите в каталог для размещения работы и создайте новое решение с именем Petzold5
Оболочка создаст новый подкаталог Petzold5 в выбранном каталоге размещения работы.
- Щелкните правой кнопкой мыши на узле решения в панели Solution Explorer и добавьте к решению новый пустой проект с именем Test
- В панели Solution Explorer щелкните правой кнопкой мыши на узле References (ссылки) проекта и выполните команду Add Reference контекстного меню
- Добавьте ссылки на нужные нам библиотеки DLL как показано на снимке
- Щелкните по узлу Test панели Solution Explorer и добавьте в проект новый класс с именем Start.cs
Мастер оболочки создаст заготовку, которую мы и будем использовать для испытания примеров, рассматриваемых далее.
using System; namespace Test { /// /// Summary description for Start. /// public class Start { public Start() { // // TODO: Add constructor logic here // } } }Листинг 16.2. Начальная заготовка, созданная мастером
- Добавьте в начало файла Start.cs нужные пространства имен, соответствующие добавленным ссылкам на библиотеки DLL. Сделайте наш класс наследником библиотечного класса Form. Удалите сгенерированные оболочкой комментарии и должен получиться такой код
using System; using System.Windows.Forms; using System.Drawing; namespace Test { public class Start : Form { public Start() { // В этом конструкторе будем размещать // настройки формы } } }Листинг 16.3. Начальный код главной формы (файл Start.cs)
Отметьте, что как только мы добавили к нашему классу базовый класс Form, в панели Solution Explorer пиктограмма класса заменилась на значек формы.
- Добавьте к проекту новый пустой файл с именем AppClass.cs, в котором мы разместим точку входа приложения
- Удалите из кода файла AppClass.cs лишние комментарии и конструктор. Окончательно содержащий точку входа класс должен иметь такой код
namespace Test { public class AppClass { // Точка входа приложения static void Main() { System.Windows.Forms.Application.Run(new Start()); } } }Листинг 16.4. Класс AppClass с точкой входа
Здесь мы из точки входа, расположенной в классе AppClass, создаем экземпляр главной формы вызовом конструктора класса Start.
- Выполните команду меню оболочки Project/Test Properties и в поле Output Type вкладки Common Properties/General установите значение Windows Application, чтобы отключить окно командной строки приложения
В этом же окне свойств проекта установите параметр Startup Object в значение Test.AppClass
- Задайте значение строки заголовка главной формы, разместив в конструкторе класса Start следующий код
using System; using System.Windows.Forms; using System.Drawing; namespace Test { public class Start : Form { public Start() { this.Text = "Главная форма Lab36B"; } } }Листинг 16.5. Задание значения строки заголовка формы Start
- Постройте проект и убедитесь, что пустая форма создается
Теперь мы поместим на главную форму элемент управления ListBox и заполним в нем строки заголовков упражнений, которые нам предстоит выполнить в этой лабораторной работе. Затем мы создадим обработчики событий выбора любого из упражнений, внутри которых будем запускать дочерние формы, соответствующие каждому отдельному упражнению. Упражнения будут демонстрировать возможности классов библиотеки .NET Framework и языка C#.
- Откройте форму Start.cs в режиме View Designer и поместите на ней из панели Toolbox элемент управления ListBox. Выделите элемент управления ListBox и через панель Properties задайте значения его свойств в соответствии с таблицей
- Растяните форму Start.cs так, чтобы все строки списка были полностью в ней видны
- Запустите приложение.
Мы не увидели тех изменений, которые внесли в форму и ожидали увидеть. Как и прежде, она оказалось пустой. Исправим это.
- Щелкните на форме правой кнопкой мыши и выполните команду View Code
Мы видим, что оболочка сгенерировала соответствующий код, когда мы создавали пользовательский интерфейс. Весь сгенерированный код разместился в функции InitializeComponent(), но вызова этой функции в коде нет.
public Start() { this.Text = "Главная форма Lab36B"; InitializeComponent(); }Листинг 16.6. Добавление в конструктор класса Start вызова функции инициализации
- Постройте приложение - должен получиться такой результат
Теперь нам нужно создать обработчик, который бы при выборе любой строки списка запускал соответствующую форму.
- Перейдите в режим View Designer формы Start и выделите компонент listBox. Установите в панели Properties режим Events и для события SelectedIndexChanged двойным щелчком на его поле значений создайте обработчик, который заполните так
private void listBox_SelectedIndexChanged(object sender, System.EventArgs e) { switch(listBox.SelectedIndex + 1) { case 1: XMarksTheSpot frm1 = new XMarksTheSpot(); frm1.Show(); break; case 2: HelloPrinter frm2 = new HelloPrinter(); frm2.Show(); break; case 3: PrintableForm frm3 = new PrintableForm(); frm3.Show(); break; case 4: BoxingTheClient frm4 = new BoxingTheClient(); frm4.Show(); break; case 5: DrawHouse frm5 = new DrawHouse(); frm5.Show(); break; case 6: SineCurve frm6 = new SineCurve(); frm6.Show(); break; case 7: PolyEllipse frm7 = new PolyEllipse(); frm7.Show(); break; case 8: ClientEllipse frm8 = new ClientEllipse(); frm8.Show(); break; case 9: Spiral frm9 = new Spiral(); frm9.Show(); break; case 10: OutlineClientRectangle frm10 = new OutlineClientRectangle(); frm10.Show(); break; case 11: DashedEllipse frm11 = new DashedEllipse(); frm11.Show(); break; case 12: RoundRect frm12 = new RoundRect(); frm12.Show(); break; case 13: PieChart frm13 = new PieChart(); frm13.Show(); break; case 14: BetterPieChart frm14 = new BetterPieChart(); frm14.Show(); break; case 15: FillModesClassical frm15 = new FillModesClassical(); frm15.Show(); break; }Листинг 16.7. Обработчик выбора элементов списка