Модификация приложения Windows Forms : открытие файла, сохранение файла и работа с текстом



 

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

 

Расставим третью группу следующим образом:

 

Рис. 5. 1. Расстановка элементов третьей группы (Открытие файла, сохранение файла и работа с текстом)

 

Перетащим с панели элементов новый элемент ContextMenuStrip. Установим для него свойство ( Name ): MenuRight. Заполним его элементами также как и главное меню Файл:

 

Если редактирование прямо на форме не слишком наглядно, можно также воспользоваться расширенным редактором коллекции элементов для меню. Он также подходит для обычного меню MenuStrip, элемента ToolStrip и строки состояния StatusStrip.

 

Рис. 6. 1. Редактор коллекции элементов (для MouseRight)

 

С панели инструментов добавим также элементы диалоговых окон сохранения и загрузки: OpenFileDialog и FileSaveDialog. Установим им имена ( Name ) соответственно: FileOpen и FileSave:

 

Свойства элемента FileSave:

(Name): FileSave
FileName: Документ

^ Здесь указываем название файл без разширения по умолчанию.

InitialDirectory: <ваш путь>

Если нужно указать стартовую директорию для сохранения. Путь может выглядеть так: D :\ Folder 1\ Folder 2

DefaultExt: Файлы RTF|*.rtf

^ Здесь указывается суффикс файла сохранения и название этого суффикса.

Filter: Файлы RTF|*.rtf|Текстовый документ|*.txt|Текст OpenDocument|*.odt|Все файлы|*.*

ПРИМЕЧЕНИЕ № 4: Свойства DefaultExt и Filter записываются через разделители «|». Напомним, что в лабораторных работах данного практикума запись значений для полей свойств элементов управления иногда такова: «Имя свойства: <Значение>.» — точка после закрывающей кавычки не относится к значению, поэтому не стоит заносить скажем в поле принимающее только целое числовое значение ещё и точку. Среда выдаст ошибку либо уберёт точку.

 

Пример (задание точки в имени элемента):

 

Рис. 6. 2. Ошибочное задание поля ( Name )

 

Свойства элемента FileOpen:

(Name): FileOpen
FileName: Документ

^ Здесь указываем название файл без расширения по умолчанию.

 

Имена остальных элементов оставляем как есть:

 

( Name ): button10
Text: Цвет
ToolTip на Hint: Цвет выделенного текста

 

(Name): button11
Text: Шрифт
ToolTip на Hint: Шрифт выделенного текста

 

(Name): button14
Text: Фон
ToolTip на Hint: Фон выделенного текста

 

( Name ): button15
Text: Копировать
ToolTip на Hint: Копировать выделенный текст в буфер обмена

 

(Name): button13
Text: Выделить всё

 

(Name): button12
Text: Очистить

 

Событие Click кнопки Цвет:

 

   private void button10_Click(object sender, EventArgs e)

   {

       ColorSelect.ShowDialog();

       richTextBox1.SelectionColor = ColorSelect.Color; // Меняем цвет выделенного текста richTextBox1

   }

 

Событие Click кнопки Шрифт:

 

   private void button11_Click(object sender, EventArgs e)

   {

       try

        {

           FontSelect.ShowDialog();

           richTextBox1.SelectionFont = FontSelect.Font; // Меняем шрифт выделенного текста richTextBox1

       }

       catch

       {

           // Ловим ошибку: шрифт не TrueType

       }

   }

 

Событие Click кнопки Фон:

 

   private void button14_Click(object sender, EventArgs e)

   {

       ColorSelect.ShowDialog();

       richTextBox1.SelectionBackColor = ColorSelect.Color; // Меняем фон выделенного текста richTextBox1

   }

 

Событие Click кнопки Копировать:

 

   private void button15_Click(object sender, EventArgs e)

   {

       richTextBox1.Copy(); // Копируем выделенный фрагмент текста в элементе

   }

 

Событие Click кнопки Очистить:

 

   private void button12_Click(object sender, EventArgs e)

   {

       richTextBox1.Clear(); // Очистка richTextBox1

   }

 

Событие Click кнопки Выделить всё:

 

   private void button13_Click(object sender, EventArgs e)

     {

       richTextBox1.Focus(); // Фокус на элемент

       richTextBox1.SelectAll(); // Выделяем весь текст

   }

 

Событие Click кнопки главного меню Открыть:

 

   private void открытьToolStripMenuItem_Click(object sender, EventArgs e)

   {

       try

       {

           // Открываем диалог открытия файла

           FileOpen.ShowDialog();

           // Создаём поток для содержимого файла

           Stream FStream = FileOpen.OpenFile();

           // Загружаем файл (открываем форматированный текст)  

           richTextBox1.LoadFile(FStream, RichTextBoxStreamType.RichText);

           // Закрываем поток и высвобождаем память

           FStream.Close();

           this.Text = Title + " :: " + FileOpen.FileName;

       }

       catch

       {

           // Ловим ошибку: файл не найден

       }

   }

 

Событие Click кнопки главного меню Сохранить как…:

 

   private void сохранитьToolStripMenuItem_Click(object sender, EventArgs e)

   {

       // Создаём строковую переменную для хранения имени сохранённого файла

       String FileSavedAs;

       // Создаём поток в памяти

       MemoryStream MStream = new MemoryStream();

       // Cоздаём поток для файл

       Stream FStream;

 

       if (FileSave.ShowDialog() == DialogResult.OK) // По завершении диалога и нажатии кнопки ОК...

       {

           // Связываем поток с именем существующего файла, если файла нет, то создаём новый файл

           FStream = FileSave.OpenFile();

           // Меняем положение в потоке

           MStream.Position = 0;

           // Сохраняем в поток содержимое richTextBox1 (сохраняем форматированный текст)

              richTextBox1.SaveFile(MStream, RichTextBoxStreamType.RichText);

           // Записываем информацию в файл

           MStream.WriteTo(FStream);

           // Закрываем поток и высвобождаем память

           FStream.Close();

           FileSavedAs = FileSave.FileName;

           this.Text = Title + " :: " + FileSavedAs; // После сохранения укажем сохранённый файл в заголовке

       }

   }

Модифицируем событие Click кнопки :

 

   private void button4_Click(object sender, EventArgs e)

   {

       SaveQuestion(); // Вызов метода обработки "правильного" закрытия предложения с выводом диалога сохранения данных

   }

 

Сам метод SaveQuestion (), добавим в этом же файле LWP 05 Main . cs:

 

   void SaveQuestion()

   {

       DialogResult Result = MessageBox.Show("Сохранить изменения в документе?", Title + " :: Сохранение изменений", MessageBoxButtons.YesNo);

 

       switch (Result) // Оператор переключения switch, получает значения Result результата выполнения диалога

       {

           case DialogResult.Yes:

           {

               сохранитьToolStripMenuItem_Click(null, null); // Генерируем событие нажатия кнопки Сохранить как...

               Close();

               break;

           }

           case DialogResult.No: { Close(); return; }

       }

   }

В начале файла добавим строковую переменную:

 

public partial class LWP05Main : Form

{

   String Title; // Строковая переменная для хранения заголовка приложения

 

Модифицируем метод LWP 05 Main () следующим образом:

 

   public LWP05Main()

   {

       InitializeComponent();

       /* Инициализируем массив элементов для checkedListBox1 */

       String[] CheckItems = { "Непрозрачность окна в %", "Овальное окно" };

       checkedListBox1.Items.AddRange(CheckItems);

       /* Устанавливаем режим выбора 'ktvtynf с двойного нажатия на одинарный */

       checkedListBox1.CheckOnClick = true;

       NumericAplha.Value = 100; // Начальное значение

       progressBar1.Maximum = 60; // Граница индикаторы выполнения

       Title = this.Text; // Сохраняем первоначальный заголовок

   }

 

Теперь обработаем контекстное меню. События Click кнопок контекстного меню Открыть, Сохранить как … и Выход:

 

   private void открытьToolStripMenuItem1_Click(object sender, EventArgs e)

   {

       открытьToolStripMenuItem_Click(null, null); // Вызываем метод события Click главного меню для пункта Открыть

   }

 

   private void сохранитьКакToolStripMenuItem_Click(object sender, EventArgs e)

   {

       сохранитьToolStripMenuItem_Click(null, null); // Вызываем метод события Click главного меню для пункта Сохранить как...

   }

 

   private void выйтиToolStripMenuItem_Click(object sender, EventArgs e)

   {

       SaveQuestion();

   }

 

События MouseEnter оставшихся кнопок главного меню:

 

   private void открытьToolStripMenuItem_MouseEnter(object sender, EventArgs e)

   {

       StatusLabel.Text = открытьToolStripMenuItem1.Text + " (" + открытьToolStripMenuItem1.ShortcutKeyDisplayString + ")";

   }

 

   private void сохранитьToolStripMenuItem_MouseEnter(object sender, EventArgs e)

   {

       StatusLabel.Text = сохранитьКакToolStripMenuItem.Text + " (" + сохранитьКакToolStripMenuItem.ShortcutKeyDisplayString + ")";

   }

 

Компилируем, проверяем работоспособность:

 

Рис. 6. 3. Окончательная работа третьего блока (Открытие файла, сохранение файла и работа с текстом)

 


Дата добавления: 2019-09-13; просмотров: 558; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!