Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная работа 3

.pdf
Скачиваний:
14
Добавлен:
15.04.2015
Размер:
672.89 Кб
Скачать

Лабораторная работа №3 ИСПОЛЬЗОВАНИЕ ИНТЕРФЕЙСНЫХ ЭЛЕМЕНТОВ

В WINDOWS-ПРИЛОЖЕНИЯХ

Добавление рабочих панелей

Любое Windows приложение обычно включает одну или несколько панелей инструментов (ToolsBar) для быстрого доступа к часто выполняемым действиям и, как правило, панель статуса (StatusBar) – информационную панель для отображения различной оперативной и служебной информации в нижней части окна приложения.

Панель инструментов на основе контрола Panel

Наиболее просто и достаточно удобно реализовать ToolsBar на основе контрола Panel.

Создайте новое Windows Application приложение C#. Поместите на форму контрол MenuStrip и создайте пункт меню File и подпункт Exit. Для данного подпункта создайте обработчик события Click с методом Сlose().

Далее поместите на форму контрол Panel. Контрол имеет стандартный набор свойств и методов. Большинство свойств достаточно прозрачны для понимания влияния на логику работы и состояния. Рассмотрим некоторые свойства контрола Panel.

Cвойства, начинающиеся с префикса Accessible (AccessibleRole, AccessibleName, AccessibleDescription) введены с целью упрощения определения назначения конрола. Они не влияют на логику работы контрола и являются описательными по отношению к его функциональному назначению. Соблюдение нотации [Accessibility] является необходимым для сертификации программного продукта как "Certified for Windows".

Свойство Causes Validation применяется для определения необходимости генерации события Validate для элемента управления, владевшего фокусом ввода непосредственно перед тем элементом управления, для которого устанавливается данное свойство.

Установите следующие свойства для контрола Panel:

Doc - "Top";

Size/Height - "26";

BorderStyle - "FixedSingle";

BackColor - по вкусу;

Поместите на Panel контрол Button и установите его свойства:

Doc - "None";

Location/X - "1";

Location/Y - "1";

Image - нарисуйте свою картинку размером 24*24 пикселя

(например в PaintBrush);

ImageAligm - "MiddleCenter";

BackColor - по вкусу.

Перейдите на вкладку Events окна Properties и в выпадающем списке напротив события Click выберите exitToolStripMenuItem_Click (имя обработчика события выбора пункта Exit меню).

private void exitToolStripMenuItem_Click(object sender, EventArgs e)

{

Close();

}

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

управления (ToolBar).

Вывод подсказок

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

ToolTip on toolTip1

Запишите в поле ввода свойства кнопки слово Exit (Рис. 1.). Это, собственно, и есть поле, в которое пишется текст выводимой подсказки при помещении указателя мышки над данным элементом.

Рис. 1. Вывод подсказок для кнопок

Запустите приложение и убедитесь, что при наведении курсора на кнопку появляется подсказка.

Отображение состояния нажата/отжата кнопка типа Button

Состояние отжата или нажата кнопка типа Button можно только имитировать программно и графически. Следующий код показывает, как это выполнить (Рис. 2.) (предварительно в контрол imageList1 необходимо загрузить соответствующие картинки):

private void button1_Click(object sender, EventArgs e)

{

if(button1.FlatStyle == System.Windows.Forms.FlatStyle.Standard)

{

button1.FlatStyle= System.Windows.Forms.FlatStyle.Popup; button1.Image=imageList1.Images[1];

}

else

{

button1.FlatStyle= System.Windows.Forms.FlatStyle.Standard; button1.Image=imageList1.Images[0];

}

}

Рис.2. Программная имитация нажатия кнопки

Панель инструментов на основе контрола ToolStrip

Уберите с формы созданного приложения контрол Panel, поместите на форму контрол ToolStrip и установите его свойства:

AutoSize - "True" (размер ToolStrip подгоняется под размер родительского контрола);

BackColor - цвет по вашему усмотрению или значение Control (цвет родительского контрола);

Doc - "Top";

LayoutStyle - расположение элементов на панели, выберите

HorisontalStackWithOverflow (по умолчанию);

MaximumSize и MiniumSize, Size - иногда бывает целесообразно выбрать размер по Y, такой, чтобы можно было разместить рисунки на элементах панели инструментов без их искажения.

На контрол ToolStrip можно добавить много разных элементов (Рис. 3.).

Рис. 3. Выбор и добавление элементов на инструментальную панель

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

ImageAlign - MiddleCenter;

ImageScaling - None;

AutoSize - False;

В свойство Image, нажав кнопку с тремя точками в поле свойства, загрузите рисунок 24*24 пикселя (или в свойстве Items контрола ToolStrip вызвать Collection Editor - кнопка с тремя точками справа от Collection);

ImageTransparentColor - выбирите цвет, который будет в рисунке отображаться как прозрачный;

ToolTipText (при наличии внедренного на форму контрола ToolStrip) - текст подсказки, отображаемый при наведении на кнопку мышки;

Двойным кликом на кнопке или через вкладку Events окна Properties для Button панели ToolStrip, можно создать обработчик события нажатия кнопки. Однако, в большинстве случаев, кнопки инструментальной панели дублируют соответствующие им кнопки меню, поэтому, в выпадающем списке свойства

Click, выберите exitToolStripMenuItem1_Click.

Далее запустите приложение и попробуйте воспользоваться кнопкой панели созданной инструментов для закрытия формы (Рис.4).

Рис. 4. Приложение с панелью инструментов ToolStrip

Панель статуса и контрол StatusStrip

Панель статуса (StatusBar, строка состояния) применяется для вывода справочной или полезной для пользователя информации.

Добавьте на созданную форму контрол StatusStrip (Рис. 5) и выведите в него текст.

Рис. 5. Добавление панели статуса в приложение

Для вывода текста необходимо определите поле для его вывода. Это можно сделать в поле выбора элементов контрола (Рис. 5) или вызвать через свойство

Items (Collection) - кнопка с тремя точками - Items Collections Editor. Выберите для вывода текста StatusLabel и в окне Properties элемента toolStripStatusLabel1

установите свойства:

AutoSize - False;

Size - установите приемлемый размер для вывода текста;

Text - уберите имя элемента;

Text Align - MidleLeft;

Font - установите шрифт;

DisplayStyle - Text (при ImageAndText можно выводить рисунок в панель статуса);

Установите цвета и т.п.

Можно установить свойство Spring элемента в True. В этом случае размер элемента будет занимать всю оставшуюся ширину контрола, не занятую другими элементами.

Пример кода, использующего события MouseHover и MouseLeave для фиксации начала и конца вывода (Рис. 6):

private void toolStripButton1_MouseHover(object sender, EventArgs e)

{

toolStripStatusLabel1.Text = "Close Form";

}

private void toolStripButton1_MouseLeave(object sender, EventArgs e)

{

toolStripStatusLabel1.Text = "";

}

Рис. 6. Использование панели статуса для вывода подсказок

Вывод текстовой информации в контрол Label

Для вывода текстовой информации на форму наиболее часто применяются контролы Label и TextBox, которые мы уже использовались ранее.

Контрол TLabel предназначен для вывода однострочной текстовой информации и имеет стандартный набор свойств и методов, большинство из которых прозрачны или описаны в предыдущих параграфах. Отметим, что в контрол можно помещать не только текст, но и рисунки, используя набор свойств Image, ImageAlign, ImageList).

Интересным является свойство UseMnemonic, позволяющее определить, как будет интерпретироваться символ амперсанда (&), размещенный в свойстве Text. Если установлено значение True, то амперсанд из текста удаляется, а символ, перед которым он расположен, подчеркивается. Эта возможность применяется для определения клавиш быстрого доступа для выбора именно контрола Label - пользователь может комбинацией клавиш <А1t>+<подчеркнутая клавиша в метке> устанавливать фокус на контрол, а затем, используя клавишу Tab, на контрол, следующий по таб номеру за контролом Label. Например, если в форме расположено несколько контролов, среди которых имеется текстовое поле, в которое необходимо перейти нажатием клавиши быстрого доступа, то достаточно установить свойства Tabindex метки и текстового поля так, чтобы для метки это значение было на единицу меньшее, чем у текстового поля. После этого в программе можно

выбрать клавишами быстрого доступа метку и, далее нажатием клавиши Tab выбрать текстовое поле для ввода информации.

Для вывода текста в контрол используется свойство Text:

label1.Text="My Text";

Вывод текстовой информации в контрол TextBox

Основные свойства TextBox

Контрол TextBox использовался ранее для ввода и вывода однострочного текста. Однако он позволяет вводить и выводить многострочный текст. Для этого используется свойство Multiline, которое должно быть установлено в

True.

Cвойства AcceptsTab и AcceptsReturn определяют действие при нажатии клавиш Tab и Enter. При из значении, равном False (по умолчанию), при нажатии Tab или Enter осуществляется переход фокуса к следующему по TabIndex контролу. При их значении, равном True, клавиши выполняют основное свое назначение - вставка разрыва табуляции и перевод строки соответственно.

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

Свойство CharacterCasing определяет регистр, в котором будет отображаться текст в контроле.

Свойство HideSelection целесообразно установить в False - в противном случае выделенный программно текст не будет отображаться.

Свойство Locked определяет, может ли пользователь изменять свойства TextBox программно.

Свойство ScrollBars показывает положение полос прокрутки - при Both полоса прокрутки появляется при выходе текста за соответствующую границу.

Свойство PasswordChar (работает только при Multiline=false) не дает возможности просматривать вводимые символы, заменяя их на привычные для ввода пароля звездочки или другой символ, указанный в этом поле.

Свойство WordWrap при True разрешает перенос текста на новую строку при ширине строки текста более ширины окна.

Программный вывод текста в TextBox

Создайте Windows-приложение для вывода текстовой информации с контролом TrxtBox, показанное на Рис. 7.

Рис.7. Windows-приложения для вывода текстовой информации

Создание кнопочной панели, меню и панели статуса уже рассмотрены ранее. Поэтому приведем лишь коды обработчиков событий для кнопок. У кнопок установлено свойство Tag соответственно в 1, 2 и 3 и события MouseHover и MouseLeave для всех кнопок замкнуты на toolStripButton1_MouseHover и toolStripButton1_MouseLeave. Для вывода подсказок использован контрол toolStrip, а для вывода подсказок в панель статуса StatusStrip и соответствующий код (все тонкости описаны в предыдущих параграфах).

private void toolStripButton1_MouseHover(object sender, EventArgs e)

{

int i = Convert.ToInt32((sender as ToolStripButton).Tag); switch (i)

{

case 1:

toolStripStatusLabel1.Text = "Output Text"; break;

case 2:

toolStripStatusLabel1.Text = "Delete String"; break;

case 3:

toolStripStatusLabel1.Text = "Close Form"; break;

}

}

private void toolStripButton1_MouseLeave(object sender, EventArgs e)

{

toolStripStatusLabel1.Text = "";

}

Прежде чем выводить текст программно, нажмите кнопку с тремя точками в свойстве Lines (вызов String Collection Editor) и введите несколько строк текста с клавиатуры. После нажатия кнопочки OK текст появится в окне контрола и в свойстве Text. Это говорит о том, что текст можно выводить как в свойство Text, так и использовать свойство Lines (String[] Array). Обратите внимание, что в свойстве Text присутствуют два нечитаемых символа - это \r и \n - перевод строки и возврат каретки. При редактировании текста необходимо учитывать наличие этих символов. У свойства Lines нет методов Add и Delete для строк, что также создает дополнительные трудности при редактировании текста.

Перед началом манипулирования с текстом определите статическую переменную viNom в декларационной части кода:

public partial class Form1 : Form

{

private static int viNom=0;

.....

Следующие коды обработчиков событий нажатия для кнопок показывают возможности редактирования многострочного текста. Раскомментируйте интересующий вас способ.

toolStripButton1_Click(object sender, EventArgs e)

{

////Вывод текста в одну строку

//textBox1.Text+=" Text "+(Convert.ToInt32(viNom)).ToString(); viNom++;

////Первый способ вывода многострочного текста

//textBox1.Text+="Строка "+(Convert.ToInt32(viNom)).ToString()+"\r\n"; //viNom++;

//textBox1.Text += "Строка " + (Convert.ToInt32(viNom)).ToString() + "\r\n";

////Второй способ вывода многострочного текста

//textBox1.AppendText("Строка "Convert.ToString(viNom)+"\r\n"); //viNom++;

//textBox1.AppendText("Строка " + Convert.ToString(viNom) + "\r\n");

////Третий способ вывода многострочного текста

//textBox1.Text = "Строка 1" + System.Environment.NewLine + "Строка 2";

////Четвертый способ вывода многострочного текста

//(требует подключения using System.IO) //System.IO.StringWriter writer = new System.IO.StringWriter();

//writer.WriteLine("Строка 1"); //writer.WriteLine("Строка 2"); //textBox1.Text += writer.ToString();

////Пятый способ вывода многострочного текста

//textBox1.Lines = new string[]{"Строка 1", "Строка 2"}; //Добавляем строку к любому методу

//textBox1.AppendText(Environment.NewLine+"Строка 3");

}

private void toolStripButton2_Click(object sender, EventArgs e)

{

string sLine;

String sSearchString; try

{

sSearchString=textBox1.Lines[0].ToString();

}

catch

{

//Удалять нечего return;

}

//Отобразим в заголовке окна удаляемый текст this.Text=sSearchString;

//Можно удалить все

//textBox1.SelectAll();

//textBox1.Cut();

//Если знаем, что удалять будем именно первую строку textBox1.SelectionStart = 0;

//Длина +2 - запас на \r\n textBox1.SelectionLength=sSearchString.Length+2; if(textBox1.SelectionLength > 0)

{

MessageBox.Show(this,

"Есть выделенный текст он = "+textBox1.SelectedText); //И далее просто удалить

textBox1.Cut();

}

//Если удалить надо по содержимому sSearchString="Строка 2";

int index=-1;

for(int i=0;i < textBox1.Text.Length-sSearchString.Length;i++)

{

index = textBox1.Text.IndexOf(sSearchString,i,sSearchString.Length);

if(index != -1) break;

}

if(index != -1)

{

//Можно выделить и так textBox1.Select(index,index+sSearchString.Length+2); textBox1.Cut();

}

}