Опубликован: 13.07.2010 | Уровень: специалист | Доступ: платный
Самостоятельная работа 15:

Вывод текста в клиентскую область формы

Аннотация: Применение секционных скобок для удобства редактирования. Создание заготовок для дочерних форм. Использование библиотеки FCL. Получение информации о системе. Разделение текстовых строк. Разбивка текста на колонки. Создание своего класса со свойствами "только для чтения". Организация прокрутки с помощью элемента Panel. Механизм работы автопрокрутки. Прокрутка без использования элементов управления. Отслеживание изменений в выводимой информации. Оптимизация работы функции прорисовки недействительной области.

Файлы к лабораторной работе Вы можете скачать здесь.

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

Создание заготовки приложения для выполнения упражнений C#

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

  • Перейдите в каталог для размещения работы и создайте новое решение с именем Petzold4



Оболочка создаст новый подкаталог Petzold4 в выбранном каталоге размещения работы.

  • Щелкните правой кнопкой мыши на узле решения в панели 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
      //
    }
  }
}
Листинг 15.1. Начальная заготовка, созданная мастером
  • Добавьте в начало файла Start.cs нужные пространства имен, соответствующие добавленным ссылкам на библиотеки DLL. Сделайте наш класс наследником библиотечного класса Form. Удалите сгенерированные оболочкой комментарии и должен получиться такой код
using System;
using System.Windows.Forms;
using System.Drawing;
  
namespace Test
{
  public class Start : Form
  {
    public Start()
    {
      // В этом конструкторе будем размещать
      // настройки формы
    }
  }
}
Листинг 15.2. Начальный код главной формы (файл Start.cs)

Отметьте, что как только мы добавили к нашему классу базовый класс Form, в панели Solution Explorer пиктограмма класса заменилась на значек формы.

  • Добавьте к проекту новый пустой файл с именем AppClass.cs, в котором мы разместим точку входа приложения


  • Удалите из кода файла AppClass.cs лишние комментарии и конструктор. Окончательно содержащий точку входа класс должен иметь такой код
namespace Test
{
  public class AppClass
  {
    // Точка входа приложения
    static void Main()
    {
      System.Windows.Forms.Application.Run(new Start());
    }
  }
}
Листинг 15.3. Класс 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 = "Главная форма Лекция №15";
    }
  }
}
Листинг 15.4. Задание значения строки заголовка формы Start
  • Постройте проект и убедитесь, что пустая форма создается


Теперь мы поместим на главную форму элемент управления ListBox и заполним в нем строки заголовков упражнений, которые нам предстоит выполнить в этой лабораторной работе. Затем мы создадим обработчики событий выбора любого из упражнений, внутри которых будем запускать дочерние формы, соответствующие каждому отдельному упражнению. Упражнения будут демонстрировать возможности классов библиотеки .NET Framework и языка C#.

  • Откройте форму Start.cs в режиме View Designer и поместите на ней из панели Toolbox элемент управления ListBox. Выделите элемент управления ListBox и через панель Properties задайте значения его свойств в соответствии с таблицей
Значения свойств элемента управления ListBox
Свойство Значение
Name listBox
Dock Fill
Items 1) Избранные сведения о системе (SysInfoFirstTry)
  2) Разбиение текста на колонки (SysInfoColumn)
  3) Использование своего класса (SysInfoList)
  4) Добавление полос прокрутки (SysInfoPanel)
  5) Прокрутка без элементов управления (SysInfoScroll)
  6) События изменения настроек системы (SysInfoUpdate)
  7) Оптимизация работы функции прорисовки (SysInfoEfficient)
  • Растяните форму Start.cs так, чтобы все строки списка были полностью в ней видны


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

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

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

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

  • Поместите в конструктор класса Start код вызова функции InitializeComponent()
public Start()
    {
      // В этом конструкторе будем размещать
      // настройки формы
      this.Text = "Главная форма Лекция №15";
      InitializeComponent();
    }
Листинг 15.5. Добавление в конструктор класса Start вызова функции инициализации
  • Постройте приложение - должен получиться такой результат


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

  • Перейдите в режим View Designer формы Start и выделите компонент listBox. Установите в панели Properties режим Events и для события SelectedIndexChanged двойным щелчком на его поле значений создайте обработчик, который заполните так
private void listBox_SelectedIndexChanged(object sender, System.EventArgs e)
    {
      switch(listBox.SelectedIndex + 1)
      {
        case 1:
          SysInfoFirstTry  frm1 = new SysInfoFirstTry();
          frm1.Show();
          break;
        case 2:
          SysInfoColumn frm2 = new SysInfoColumn();
          frm2.Show();
          break;
        case 3:
          SysInfoList frm3 = new SysInfoList();
          frm3.Show();
          break;
        case 4:
          SysInfoPanel frm4 = new SysInfoPanel();
          frm4.Show();
          break;
        case 5:
          SysInfoScroll frm5 = new SysInfoScroll();
          frm5.Show();
          break;
        case 6:
          SysInfoUpdate frm6 = new SysInfoUpdate();
          frm6.Show();
          break;
        case 7:
          SysInfoEfficient frm7 = new SysInfoEfficient();
          frm7.Show();
          break;
      }
    }
Листинг 15.6. Обработчик выбора элементов списка
Александр Очеретяный
Александр Очеретяный
Украина, Киев
Анастасия Балыбердина
Анастасия Балыбердина
Украина, Киев, НТУУ КПИ