Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
WPF-практика 5 События и команды.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.21 Mб
Скачать

Реализация обработчиков раздела меню File

  • Выделите корень проекта Notepad1 и командой Project/Add Reference подключите сборки System.Windows.Forms.dll и System.Drawing.dll

  • Модифицируйте код файла File.cs следующим образом

using System;

using System.Collections.Generic;

using System.Text;

using System.Windows;

using System.Windows.Controls;

using System.Windows.Data;

using System.Windows.Documents;

using System.Windows.Input;

using System.Windows.Media;

using System.Windows.Media.Imaging;

using System.Windows.Navigation;

using System.Windows.Shapes;

// Для сборок: System.Windows.Forms.dll, System.Drawing.dll

using sdp = System.Drawing.Printing;// Псевдоним пространства имен

using swf = System.Windows.Forms; // Псевдоним пространства имен

using PageSetupDialog = System.Windows.Forms.PageSetupDialog;// Псевдоним класса

namespace Notepad1

{

partial class Window1

{

//------------------------------------------------------

//

// Обработчики источников задач File

//

//------------------------------------------------------

private void NewOnExecute(object sender, RoutedEventArgs e)

{

// Пользователь передумал или была ошибка записи изменений

if (!CheckModifiedAndSaveIt())

return;

// Изменений нет или они успешно сохранены

//txtBox1.Text = String.Empty; // Вариант I

//txtBox1.Text = ""; // Вариант II

txtBox1.Clear(); // Вариант III

strLoadedFile = null;

IsModified = false;

UpdateTitle();

txtBox1.Focus();

}

private void OpenOnExecute(object sender, RoutedEventArgs e)

{

if(DisplayOpenDialog())

txtBox1.CaretIndex = txtBox1.Text.Length;// Курсор в конец

txtBox1.Focus();// Передача фокуса

}

private void SaveOnExecute(object sender, RoutedEventArgs e)

{

if (String.IsNullOrEmpty(strLoadedFile))

DisplaySaveDialog(String.Empty);

else

SaveFile(strLoadedFile);

txtBox1.Focus();

}

private void SaveAsOnExecute(object sender, RoutedEventArgs e)

{

DisplaySaveDialog(strLoadedFile);

txtBox1.Focus();

}

private void PageSetupOnExecute(object sender, RoutedEventArgs e)

{

// Ограничемся только показом окна Windows Forms

PageSetupDialog dlg = new PageSetupDialog();

// Без настроек не работает. Зададим хотя бы по умолчанию

dlg.PageSettings = new sdp.PageSettings();

dlg.PrinterSettings = new sdp.PrinterSettings();

dlg.ShowDialog();

txtBox1.Focus();

}

private void PrintPreviewOnExecute(object sender, RoutedEventArgs e)

{

sdp.PrintDocument document = new sdp.PrintDocument();

document.DocumentName = strLoadedFile;

swf.PrintPreviewDialog dlg = new swf.PrintPreviewDialog();

dlg.Document = document;

dlg.UseAntiAlias = true;// Включить сглаживание

dlg.ShowDialog();

txtBox1.Focus();

}

private void PrintOnExecute(object sender, RoutedEventArgs e)

{

sdp.PrintDocument document = new sdp.PrintDocument();

document.DocumentName = strLoadedFile;

swf.PrintDialog dlg = new swf.PrintDialog();

dlg.Document = document;

dlg.ShowDialog();

txtBox1.Focus();

}

private void ExitOnExecute(object sender, RoutedEventArgs e)

{

if (!CheckModifiedAndSaveIt())

return; // Пользователь передумал выходить

Close();

}

}

}

Обратите внимание на использование псевдонимов пространств имен добавленных к проекту библиотечных сборок. Еще раз вспомним, что при совместном применении пользовательских интерфейсов WPF и Windows Forms имена типов одной из технологий следует прописывать полностью или использовать псевдонимы. Иначе в коде могут возникнуть конфликты имен, а если компилятор их не обнаружит, то и серьезные ошибки времени выполнения.

  • Запустите приложение, испытайте правильность функционирования обработчиков, изучите их код