Опубликован: 13.07.2010 | Доступ: свободный | Студентов: 891 / 20 | Оценка: 4.40 / 4.20 | Длительность: 77:34:00
Самостоятельная работа 16:

Рисование графических примитивов средствами 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 задайте значения его свойств в соответствии с таблицей
Значения свойств элемента управления ListBox
Свойство Значение
Name listBox
Dock Fill
Items
  1. Рисование крестика в клиентской области формы (XMarksTheSpot)
  2. Простая программа печати (HelloPrinter)
  3. Разделение кода вывода на экран и печать (PrintableForm)
  4. Очерчивание границы клиентской области (BoxingTheClient)
  5. Рисование домика функцией DrawLines() (DrawHouse)
  6. Построение синусоиды функцией DrawLines() (SineCurve)
  7. Рисование эллипса функцией DrawLines() (PolyEllipse)
  8. Рисование эллипса функцией DrawEllipse() (ClientEllipse)
  9. Рисование спирали функцией DrawLines() (Spiral)
  10. Прямоугольник по краю клиентской области (OutlineClientRectangle)
  11. Рисование эллипса функцией DrawArc() (DashedEllipse)
  12. Рисование прямоугольника со скругленными углами (RoundRect)
  13. Рисование круговой диаграммы (PieChart)
  14. Еще одна версия круговой диаграммы (BetterPieChart)
  15. Заливка сложной фигуры в разных режимах (FillModesClassical)
  • Растяните форму Start.cs так, чтобы все строки списка были полностью в ней видны

  • Запустите приложение.

Мы не увидели тех изменений, которые внесли в форму и ожидали увидеть. Как и прежде, она оказалось пустой. Исправим это.

  • Щелкните на форме правой кнопкой мыши и выполните команду View Code

Мы видим, что оболочка сгенерировала соответствующий код, когда мы создавали пользовательский интерфейс. Весь сгенерированный код разместился в функции InitializeComponent(), но вызова этой функции в коде нет.

  • Поместите в конструктор класса Start код вызова функции 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. Обработчик выбора элементов списка