Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
C#_справочные сведения.doc
Скачиваний:
9
Добавлен:
26.04.2019
Размер:
384.51 Кб
Скачать

Урок 26.Передаем данные из диалога

В этом уроке мы с вами посмотрим, как можно передавать данные из диалоговых окон (форм) в, например, основное окно программы. А именно, наша программа будет передавать строку из текстового поля из одной формы в соответствующее поле другой формы.

Создайте Windows-приложение, добавьте в него еще одну форму (для этого выбираем Add -> Windows Form из контекстного меню проекта в окне Solution Explorer). На основной форме Form1 расположите кнопку (по ней будет вызываться вторая форма) и текстовое поле (в него будут передаваться данные из второй формы). На второй форме (Form2) расположите две кнопки (которые скоро превратятся в кнопки OK и Cancel) и текстовое поле (из него текст будет передаваться в первую форму).

Теперь установим несколько свойств. Сначала для второй формы Form2. А именно свойство DialogResult для первой кнопки установите в OK (это будет кнопка OK), а для второй - в Cancel (это будет кнопка Cancel). Для самой же формы Form2 установите свойства AcceptButton в Button1 и CancelButton в Button2. Кроме того сделайте текстовое поле public (это свойство Modifiers). Собственно говоря со второй формой все. Разве что можно изменить заголовки (свойство Text) для наших кнопок на OK и Cancel соответственно. Обратите внимание, что мы не писали никакого обработчика для нажатия на кнопки OK и Cancel - они и так будут работать правильно.

Теперь займемся первой формой Form1. Добавьте в обработчик для кнопки следующий код:

private void button1_Click(object sender, EventArgs e)

{

Form2 f = new Form2();

// Если нажата кнопка OK

if (f.ShowDialog() == DialogResult.OK)

{

// то передаем данные.

textBox1.Text = f.textBox1.Text;

}

}

Как вы видите, для показа диалогового окна в модальном виде мы вызываем метод ShowDialog. Для показа в немодальном виде надо вызвать метод Show.

Урок 27. Диалог для выбора цвета

Диалог для выбора цвета расположен на вкладке Dialogs:

Он является классом ColorDialog.

Рассмотрим, как с ним можно работать. Перенесите его на форму. После этого под формой, в области для невизуальных компонентов, появится экземпляр класса ColorDialog - что-то вроде colorDialog1. Кроме компонента ColorDialog разместите на форме обыкновенную кнопку, в обработчике которой поместите следующий код:

private void button1_Click(object sender, EventArgs e)

{

// Востанавливаем пользовательские цвета в диалоге.

colorDialog1.CustomColors = customColors;

if (colorDialog1.ShowDialog() == DialogResult.OK)

{

// Записываем выбранные пользователем цвета.

customColors = colorDialog1.CustomColors;

// Получаем выбранный пользователем цвет.

color = colorDialog1.Color;

...

}

}

Собственно говоря, самая главная строчка тут - это чтение свойства Color для нашего диалога. После чего переменную color с выбранным пользователем цветом можно где-то использовать - например, вызвать Invalidate() для использования выбранного цвета в рисовании.

Разумеется, для указанного фрагмента переменные color и customColors должны быть объявлены на уровне класса:

// Переменная для хранения выбранного цвета.

Color color;

// Массив для хранения пользовательских цветов.

int[] customColors = new int[] { 0xFF0000, 0xFFFF00, 0xFF00FF };

Обратите внимание, что указанный фрагмент позволяет работать и с пользовательскими цветами - запоминать и восстанавливать их:

Урок 28. Сохранение настроек программы

На этом уроке мы с вами посмотрим, как можно сохранять настройки программы.

Для этого открываем специальный дизайнер (Settings.settings) через окно Solution Explorer:

В этом дизайнере вы можете в соответствующих столбцах указываем имя настройки, а также ее тип, область действия (это просто означает, на кого эта настройка распространяется - только на текущего пользователя или же на всех пользователей данного компьютера) и значение по умолчанию.

Теперь начинаем писать код. Сначала создаем на уровне формы пару переменых некоторых типов - именно они и будут сохранятся в настройках (переменные могут быть различных типов и их не обязательно будет две).

// Переменные для сохранения в настройках.

Color color;

string firstName;

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

private void button1_Click(object sender, EventArgs e)

{

// Новые значения для настроек.

color = Color.MediumPurple;

firstName = "Igor";

Invalidate();

// Запись настроек.

settings.MyColor = color;

settings.FirstName = firstName;

settings.Save();

}

private void button2_Click(object sender, EventArgs e)

{

// Новые значения для настроек.

color = Color.Firebrick;

firstName = "Roman";

Invalidate();

// Запись настроек.

settings.MyColor = Color.Firebrick;

settings.FirstName = firstName;

settings.Save();

}

Код достаточно простой и ясен из комментариев. Обратите только внимание, что поля MyColor и FirstName соответствующих типов уже автоматически добавились в класс Settings - это сделал наш дизайнер.

В обработчике загрузки формы напишите следующий код для восстановления настроек:

private void Form1_Load(object sender, EventArgs e)

{

try

{

// Восстановление настроек.

color = settings.MyColor;

firstName = settings.FirstName;

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

}

И, наконец, напишите код для использования настроек. Тут наше использование такое - мы берем цвет и текст из настроек и выводим этот текст этим цветом прямо на форме:

private void Form1_Paint(object sender, PaintEventArgs e)

{

// Использование настроек.

Graphics g = e.Graphics;

Font font = new Font("Arial", 10);

g.DrawString(firstName, font, new SolidBrush(color), 100, 100);

}

Разумеется, использование настроек может быть и другое - тут оно приведено просто для примера.

Можно запускать приложение. Нажимая в нем на разные кнопки, мы будем устанавливать различные настройки для нашего приложения, причем эти же настройки будут восстанавливаться при очередном запуске нашей программы.

Урок 29. Диалог для выбора шрифта (класс FontDialog)

Стандартный диалог для выбора шрифта расположен на вкладке Dialogs Toolbox'а:

Основное свойство этого диалога - это свойство Font. Оно, естественно, определяет тот шрифт, который пользователь выберет в этом диалоговом окне. Ниже приведен пример использования этого контрола.

Создайте Windows приложение, перетащите контрол FontDialog на форму. Также добавьте на форму кнопку, в обработчике которой разместите следующий код:

private void button1_Click(object sender, EventArgs e)

{

if (fontDialog1.ShowDialog() == DialogResult.OK)

{

// Получение шрифта из диалогового окна.

font = fontDialog1.Font;

// Перерисовка.

Invalidate();

}

}

Тут мы сначала получаем выбранный пользователем шрифт, а затем перерисовываем нашу форму.

Добавьте также код для перерисовки формы:

protected override void OnPaint(PaintEventArgs e)

{

Graphics g = e.Graphics;

g.DrawString("Test", font, Brushes.Blue, 20, 20);

base.OnPaint(e);

}

В этом коде мы просто выводим надпись Test на нашей форме выбранным шрифтом. Результат будет таким:

Обратите внимание, что цвет шрифта определяется кистию (в методе OnPaint), а не в диалоговом окне для выбора шрифта.

Урок 30. Диалог для открытия файла (класс OpenFileDialog)

Диалог для открытия файла расположен на вкладке Dialogs Toolbox'а:

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

private void button1_Click(object sender, EventArgs e)

{

if (openFileDialog1.ShowDialog() == DialogResult.OK)

{

fileName = openFileDialog1.FileName;

Text = fileName;

}

}

В этом коде основное - это использование свойства FileName диалога. Именно в нем и храниться имя выбранного пользователем файла. В нашем примере мы просто показываем это имя в заголовке нашего главного окна, в реальном приложении использование имени будет, разумеется, совсем другим.

В диалоге для выбора файла вы можете выбрать и несколько файлов. Для этого вы должны предварительно установить у диалога свойство Multiselect в true. Вот код:

private void button2_Click(object sender, EventArgs e)

{

if (openFileDialog1.ShowDialog() == DialogResult.OK)

{

string[] fileNames;

fileNames = openFileDialog1.FileNames;

foreach(string s in fileNames)

{

listBox1.Items.Add(s);

}

}

}

А вот так будет выглядеть наш диалог:

В приведенном примере имена выбранных пользователем файлов покажутся в listBox1, который вы должны добавить на форму. За этот набор имен отвечает свойство FileNames типа string[].

Кроме того, обратите внимание на свойство InitialDirectory. Оно позволяет задать начальную папку для нашего диалога. Свойство Filter тоже может оказаться весьма полезным - оно определяет, разумеется, что за файлы будут показываться в диалоговом окне. Например, если присвоить ему строку "txt files|*.txt; *.ini|All files|*.*", то мы будем иметь 2 фильтра - один для файлов с расширениями txt и ini и второй - для всех файлов.

Урок 31. Диалог для сохранения файла (класс SaveFileDialog)

Диалог для сохранения файла расположен на вкладке Dialogs панели Toolbox:

Перенесите его на форму в Windows-приложении. Также добавьте на форму кнопку, в обработчик которой добавьте следующий код:

private void button1_Click(object sender, EventArgs e)

{

// Установка начальной папки.

saveFileDialog1.InitialDirectory = "C:\tmp";

// Задание возможных расширений для файла.

saveFileDialog1.Filter = "abc files (*.abs)|*.abs|All files|*.*";

if(saveFileDialog1.ShowDialog()==DialogResult.OK)

{

// Код по сохранению...

string fileName = saveFileDialog1.FileName;

// ...

}

}

Как можно видеть в этом фрагменте, за введенное пользователем имя файла отвечает свойство FileName. Кроме этого в приведенном фрагменте можно видеть свойства InitialDirectory для задания начальной папки нашего диалога и Filter - для задания фильтра. Фильтры определяются парами строковых значений - первый элемент пары задает надпись, показываемаю в фильтре, и второй - собственно фильтр. В нашем примере фильтров будет два:

Из полезных свойств следует еще отметить свойства DefaultExt и AddExtention. Они отвечают за автоматическое добавление расширения к имени сохраняемого файла. Для этого первому из них надо присвоить некоторое строковое значение для расширения имени файла, а второе установить в true.

Если же вам надо поменять заголовок рассматриваемого диалогового окна, то используйте свойство Title.

Урок 32. Класс Button

Класс Button представляет из себя всем знакомую кнопку. Выглядит он на панели Toolbox так:

Самое главное событие для нее - это, естественно, Click. Оно может возникнуть разными способами - путем нажатия на кнопку мышкой, нажатием на пробел или клавишу Enter на клавиатуре (когда фокус находится на кнопке, естественно), через быструю клавишу (т. е. Atl + что-то). Для последнего способа необходимо, чтобы свойство UseMnemonic для кнопки было установлено в true (это значение по умолчанию), а перед необходимой буквой в свойстве Text кнопки нужно поставить амперсанд (&).

Для изменения внешнего вида кнопки можно использовать ее свойство Image. Оно позволяет указать любой файл с картинкой, которая и появится на кнопке. При этом само изображение импортируется в файл ресурсов (который имеет расширение resx), и для работы программы уже никакого файла с рисунком не будет нужно. Кроме того, кнопку можно сделать плоской. За это отвечает свойство FlatStyle. Если его установить, например, в Flat, то кнопка будет выглядет так:

Весьма полезной может оказаться и метод PerformClick. Он предназначен для программного нажатия на кнопку. Вот так можно нажать на кнопку button1 программным методом:

button1.PerformClick();

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]