Модификация приложения WindowsForms: стандартные диалоговые окна — КиберПедия 

Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...

Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...

Модификация приложения WindowsForms: стандартные диалоговые окна

2017-11-17 342
Модификация приложения WindowsForms: стандартные диалоговые окна 0.00 из 5.00 0 оценок
Заказать работу

 

Расставим вторую группу элементов. Наша цель, по нажатию кнопок Изменить фон формы, вызвать стандартное окно выбора цветов. По нажатию в нём кнопки ОК меняем цвет фона. Кнопка Отмена справа возвращает фон по умолчанию. Вторая кнопка Изменить шрифт формы, меняет весь шрифт используемый на форме. Кнопка Отмена возвращает всё «как было». Дальше, здесь же поставим элемент CheckedListBox. При выборе пункта Овальность, поменяем форму нашего окна на овал. При выборе пункта Непрозрачность окна в %, окно меняет прозрачность в зависимости от числа (от 0 до 100) в NumericUpDown. Кнопка Выбор директории открывает стандартный диалог выбор папки через Проводник Windows. По нажатию кнопки ОК отобразив в текстовом поле редактирования полный путь к выбранной директории. Добавим также ещё один ProgressBar который будет отсчитывать время по секундам и обнуляться по прошествии минуты. Отсчёт времени будем вести по текущему системному.

 

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

Рис. 5. 1. Расстановка элементов второй группы (Стандартные диалоговые окна)

 

Кнопка Изменить фон формы:

(Name): button5
Text: Изменить фон формы

 

Кнопка Отмена:

(Name): button6
Text: Отмена.
ToolTip на Hint: Возвращает фон формы по умолчанию

 

Кнопка Изменить шрифт формы:

(Name): button8
Text: Изменить шрифт формы

 

Кнопка Отмена:

(Name): button7
Text: Отмена
ToolTip на Hint: Возвращает шрифт формы по умолчанию

 

Список с выбором флажками CheckedListBox 5:

(Name): checkedListBox1

 

ПРИМЕЧАНИЕ № 5: Для этого элемента, как и для ComboBox и ListBox можно изначально задавать «коллекцию» уже готовых элементов. Для этого в свойствах элемента ищем поле Items и добавляем новые элементы через нажатие кнопки (…). Разделителем элементов будет перевод строки в окне добавления элементов.

 

NumericUpDown:

(Name): NumericAplha
Maximum:  

^ Максимальное число.

Mininum:  

^ Минимальное число.

Increment:  

^ Шаг.

 

Кнопка Выбор директории:

(Name): button9
Text: Выбор директории

 

Текстовое поле редактирования TextBox:

(Name): textBox1

 

Индикатор выполнения ProgressBar:

(Name): progressBar1

 

Добавим ещё один таймер, который активируем сразу же при запуска приложения:

Timer:

(Name): TimerOneMinute
Enabled: True

^ Запускаем таймер при инициализации приложения.

 

Добавим диалоговые окна с панели элементов (перетаскиванием на форму):

 

ColorDialog:

(Name): ColorSelect

FontDialog:

(Name): FontSelect

FolderBrowserDialog:

(Name): SelectBrowser

 

Теперь пропишем все необходимые события (в том порядке, в котором задавали свойства элементов управления):

 

Событие Click кнопки Изменить фон формы:

 

privatevoid button5_Click(object sender, EventArgs e)

{

ColorSelect.ShowDialog(); // Показываемокновыборацвета (Windows)

this.BackColor = ColorSelect.Color; // Устанавливаем в качестве текущего для фона формы

StatusLabel.Text = "Выбан цвет: " + ColorSelect.Color; // Выводит текст в строку состояния с названием цвета (если определено) или его RGB-представлением

}

 

Событие Click кнопки Отмена:

 

privatevoid button6_Click(object sender, EventArgs e)

{

this.BackColor = Color.Empty; // Возвращаемпервоначальныйфон

}

 

Событие Click кнопки Изменить шрифт формы:

 

privatevoid button8_Click(object sender, EventArgs e)

{

try

{

FontSelect.ShowDialog();

this.Font = FontSelect.Font;

StatusLabel.Text = "Выбраншрифт: " + FontSelect.Font.ToString();

}

catch

{

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

}

}

 

Событие Click кнопки Отмена:

 

privatevoid button7_Click(object sender, EventArgs e)

{

this.Font = DefaultFont;

StatusLabel.Text = "Выбранпервоначальныйшрифт: " + DefaultFont.Name;

}

 

Событие SelectedIndexCahged списка с выбором флажками:

 

privatevoid checkedListBox1_SelectedIndexChanged(object sender, EventArgs e)

{

GraphicsPath G = newGraphicsPath(); // Создаёмновыйграфическийэлемент

Rectangle Rect = newRectangle(0, 0, this.Width, this.Height); // Создаёмпрямоугольник

 

if (checkedListBox1.CheckedItems.Contains("Непрозрачностьокнав %") == true) // Еслиэлементвыделен

{

this.Opacity = Convert.ToDouble(NumericAplha.Value) / 100; // Прозрачонть: значение NumericAplha / 100 (0 - полнапрозрачность, 1 - полнаянепрозрачность)

}

 

if (checkedListBox1.CheckedItems.Contains("Овальноеокно") == true)

{

G.AddEllipse(0, 0, this.Width, this.Height); // Добавляем эллипс покрывающий всю форму в графический элемент

this.Region = new System.Drawing.Region(G); // Создаём объект нового региона и меняем регион формы на эллепис

}

else

{

G.AddRectangle(Rect); // Добавляем прямоугольник

this.Region = newSystem.Drawing.Region(G); // Выбираемпрямоугольник

}

}

 

Событие Click кнопки Выбор директории:

 

privatevoid button9_Click(object sender, EventArgs e)

{

SelectBrowser.ShowDialog();

textBox1.Text = SelectBrowser.SelectedPath; // Заносимзначениепутив textBox1

}

 

Событие Tick таймера:

 

privatevoid TimerOneMinute_Tick(object sender, EventArgs e)

{

Byte Seconds = Convert.ToByte(DateTime.Now.Second);

progressBar1.Value = Seconds;

}

 

Изменимкодметода LWP05Main() файла LWP05Main.cs:

 

public LWP05Main()

{

InitializeComponent();

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

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

checkedListBox1.Items.AddRange(CheckItems);

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

checkedListBox1.CheckOnClick = true;

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

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

}

 

Добавим в этом же файле два пространства имён:

 

using System.Drawing.Drawing2D; // Объявляем пространство имён для рисования 2D-графики

using System.IO;

 

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

 

Рис. 5. 2. Окончательная работа блока стандартных диалоговых окон (другой цвет формы, результат выбора шрифта для формы и директории)

 

Рис. 5. 3. Окончательная работа блока стандартных диалоговых окон

(25% прозрачности на фоне рабочего стола, овальность и диалог выбора шрифта)

 

Единственное о чём мы забыли. Для того чтобы изменить прозрачность на новое значение, нужно снять галочку и снова установить после выбора нового значения. Исправимэтособытием ValueChanged элементауправления NumericAlpha:

 

privatevoid NumericAplha_ValueChanged(object sender, EventArgs e)

{

 

if (checkedListBox1.CheckedItems.Contains("Непрозрачностьокнав %") == true) // Еслиэлементвыделен

{

this.Opacity = Convert.ToDouble(NumericAplha.Value) / 100; // Прозрачность: значение NumericAplha / 100 (0 - полнапрозрачность, 1 - полнаянепрозрачность)

}

}

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

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

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

InitialDirectory: <ваш путь>

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

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 кнопки Цвет:

 

privatevoid button10_Click(object sender, EventArgs e)

{

ColorSelect.ShowDialog();

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

}

 

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

 

privatevoid button11_Click(object sender, EventArgs e)

{

try

{

FontSelect.ShowDialog();

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

}

catch

{

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

}

}

 

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

 

privatevoid button14_Click(object sender, EventArgs e)

{

ColorSelect.ShowDialog();

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

}

 

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

 

privatevoid button15_Click(object sender, EventArgs e)

{

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

}

 

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

 

privatevoid button12_Click(object sender, EventArgs e)

{

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

}

 

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

 

privatevoid button13_Click(object sender, EventArgs e)

{

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

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

}

 

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

 

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

{

try

{

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

FileOpen.ShowDialog();

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

StreamFStream = FileOpen.OpenFile();

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

richTextBox1.LoadFile(FStream, RichTextBoxStreamType.RichText);

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

FStream.Close();

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

}

catch

{

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

}

}

 

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

 

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

{

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

String FileSavedAs;

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

MemoryStream MStream = newMemoryStream();

// 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 кнопки :

 

privatevoid button4_Click(object sender, EventArgs e)

{

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

}

 

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

 

void SaveQuestion()

{

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

 

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

{

caseDialogResult.Yes:

{

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

Close();

break;

}

caseDialogResult.No: { Close(); return; }

}

}

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

 

publicpartialclassLWP05Main: Form

{

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

 

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

 

public LWP05Main()

{

InitializeComponent();

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

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

checkedListBox1.Items.AddRange(CheckItems);

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

checkedListBox1.CheckOnClick = true;

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

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

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

}

 

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

 

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

{

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

}

 

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

{

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

}

 

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

{

SaveQuestion();

}

 

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

 

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

{

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

}

 

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

{

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

}

 

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

 

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

 


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

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...

Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...

Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.179 с.