Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Языки программирования -> Ватсон К. -> "С#" -> 175

С# - Ватсон К.

Ватсон К. С# — Лори, 2005 . — 879 c.
ISBN 1-861004-98-2
Скачать (прямая ссылка): vatsonc2005.pdf
Предыдущая << 1 .. 169 170 171 172 173 174 < 175 > 176 177 178 179 180 181 .. 404 >> Следующая


В

Fifl Ео<

1

Добавление обработчиков событий

Для написания кода сначала нужно создать обработчик меню для меню Edit, щелкнув два раза мышью на всех пунктах этого меню за исключением пункта самого верхнего уровня н разделителя н введя следующий код:

private void menuItemUndo_Click(object sender. System.EventArgs e)

{

rtfText.Undo!)i

)

private void menuItemRedo_Click(object sender. System.EventArgs e) rtfText.Redo <)j } ' private void menuItemCut_Click(object sender. System.EventArgs e)

(

rtfText.Cut!);

)

private void menuItemCopy_Click(object sender. System.EventArgs e) rtf Text. Copy t))

private void menuItemPaste_Click(object sender. System.EventArgs e) rtfText.Paste Оj -

>

В RichTextbox есть методы, точно соответствующие всем пунктам меню, поэтому просто вызываем эти функции. Как и в примере с MenuExample, рассматривавшемся ранее, необходимо проверить, должно ли данное меню быть отключенным. Эта проверка осуществляется в обработчике событий Popup. Сначала мы вносим в конструктор формы frmEditor:

public frmEditor(SimpleTextEditor.frmContainer parent)

{

InitializeComponent();

it Привязка к родители this.MdiParent = parent;
Дополнительные возможности Windows Form

371

// Подписка на событие Popup мене Edit

this.menuItemEdit. Popup += пем EventHandler{this.menuItemEdit_Popup) ;

)

Затем добавляем собственно обработчик событий: private void menuIteiaEdit_Popup( object sender. System.EventArgs e)

{

К Если выбранный текст отсутствует, то его нельзя вырезать. this.menuItemCut.Enabled * rtfText.SelectedText.Length > 0 ? true : false;

// Если выбранный текст отсутствует, его нельзя копировать.

this.menuItemCopy.Enabled “ rtfText.SelectedText.Length >07 true : false;

If Метод CanPt се управляющего элемента RichTextbox сообщает о том,

// имеется ли какая-либо информация, предназначенная для встаяхи this.menultemPaste.Enabled =

rtfText .CanPastefDataForrnats.GetFonnat (DataFormats.Rtf)) i •

t f Свойство CanUndo упразлясщего элемента RichTextbox сообщает о том,

11 имеется ли возможность отмени какого-либо действия this.menuIteroUndo.Enabled » rtfText.CanUndo;

// Свойство CanRedo управлявшего элемента RichTextbox сообщает о нам,

// имеется ли возможность выполнения какого-либо отмененного действия this, menul temRedo. Enabled = rtf Text. CanRedo;

Управляющий элемент RichTextbox оказывает исчерпывающую помощь. Можно проверить все пункты меню, чтобы выяснить, должны они быть отключены нли нет, простым вызовом функции или просмотром значения свойства. Единственное, что требует пояснений,— это CanPasteO. Этот метод получает текст, который вы собираетесь вставлять, и возвращает логическое значенне, которое равно true в том случае, если такая вставка оказывается возможной.

Теперь обратимся к меню в MDI-контейнере и начнем с пункта New меню Files. Когда происходит щелчок мышью на этом пункте, требуется создание нового окна. Подобная процедура выполняется в конструкторе. Но прн этом возникает проблема. На данный момент все окна обладают одним и тем же заголовком — Editor, что не позволяет различать их в списке MdiList. Для того чтобы исправить ситуацию, добавим в конструктор формы Editor еще один параметр, в котором будем передавать текст, предназначенный для вывода в качестве заголовка вновь создаваемого окна:

public frmEditor (SimpleTextEditor.frmContainer parent, String caption)

I

InitializeComponenc();

// Привязка к родителю this.MdiParent =¦ parent;

// Задание, заголоааа this.Text = caption;

// Подписка на событие Popup меня Edit

this.menuIteraEdit.Popup += new EventHandler(this.menuItemEdit_Popup); this.rtfText.SelectianChanged += new

EventHandler(this.rt?Toxt_SelectionChanged);

)

Это изменение означает, что необходимо изменить вызов конструктора, который создается в конструкторе контейнера:
372 Глава 14

public frmContainerО {

Initial!zeComponent(I;

SiJUpleTextEditor. frmEditor newForm » пен frmEditor(this, 'Editor 1* J f newForm.Show();

Теперь можно создать новые окна. Щелкните два раза мышью на пункте меню New и добавьте следующий код:

private void menuItemNew_Click (object sender, System.EventArgs e) {

. string caption • 'Editor ' + nextFonnbfumber++j П Заголовок
П Создание нового окна
SimpleTextEditor.frmEditor i «Form = new
V SiicpleTextEdi tor. frmEditor (this, caption) j
newForm.Show0 j // Вывод формы

)

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

private int RextPorihNutnber * 2j

Если бы мы решили использовать количество открытых окон в массиве форм (Mdichildren), то столкнулись бы с проблемой, если были открыты две формы, а затем форма с номером I закрыта. А так мы просто прибавляем единицу к текущему номеру каждый раз, когда открывается новая форма. Причина, по которой номер следующей формы равен 2, а не I, заключается в том, что для инициализации первого окна в конструкторе используется текст -Editor iv
Предыдущая << 1 .. 169 170 171 172 173 174 < 175 > 176 177 178 179 180 181 .. 404 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.