Модификация приложения 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; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!