RUS_-_Karejev_-_Razrabotka_Windows-prilozhenij
.pdfprivate const string pyat = "5"; private const string shest = "6"; private const string sem = "7"; private const string vosem = "8"; private const string devyat = "9"; private const string nul = "0";
public Calc()
{
InitializeComponent();
// При запуске приложения на экране будет нуль txtOutput.Text = "0";
} |
|
protected override void Dispose( bool disposing ) |
|
{ |
|
if( disposing ) |
|
{ |
|
if (components != null) |
|
{ |
|
components.Dispose(); |
|
} |
|
} |
|
base.Dispose( disposing ); |
|
} |
|
Windows Form Designer generated code |
|
[STAThread] |
|
static void Main() |
|
{ |
|
Application.Run(new Calc()); |
|
} |
|
/// <summary> |
///mehanizmcalkulyatora |
/// Обработчики для кнопок обращаются к методу chislonaEkrane класса |
///и передают ему одну из постоянных (odin, dva, tri и т.д.). Результат,
///возвращаемый методом,
///присваивается свойству Text текстового поля txtOutput
///</summary>
private void btn1_Click(object sender, System.EventArgs e)
{
txtOutput.Text = mehanizmcalkulyatora.chislonaEkrane (odin);
}
private void btn2_Click(object sender, System.EventArgs e)
{
txtOutput.Text = mehanizmcalkulyatora.chislonaEkrane (dva);
}
private void btn3_Click(object sender, System.EventArgs e)
{
txtOutput.Text = mehanizmcalkulyatora.chislonaEkrane (tri);
}
private void btn4_Click(object sender, System.EventArgs e)
{
txtOutput.Text = mehanizmcalkulyatora.chislonaEkrane (chetire);
}
private void btn5_Click(object sender, System.EventArgs e)
{
txtOutput.Text = mehanizmcalkulyatora.chislonaEkrane (pyat);
}
private void btn6_Click(object sender, System.EventArgs e)
{
txtOutput.Text = mehanizmcalkulyatora.chislonaEkrane (shest);
}
private void btn7_Click(object sender, System.EventArgs e)
{
txtOutput.Text = mehanizmcalkulyatora.chislonaEkrane (sem);
}
private void btn8_Click(object sender, System.EventArgs e)
{
txtOutput.Text = mehanizmcalkulyatora.chislonaEkrane (vosem);
}
private void btn9_Click(object sender, System.EventArgs e)
{
txtOutput.Text = mehanizmcalkulyatora.chislonaEkrane (devyat);
}
private void btn0_Click(object sender, System.EventArgs e)
{
txtOutput.Text = mehanizmcalkulyatora.chislonaEkrane (nul);
}
private void btnChangesign_Click(object sender, System.EventArgs e)
{
txtOutput.Text = mehanizmcalkulyatora.ZnakChisla();
}
private void btnpoint_Click(object sender, System.EventArgs e)
{
txtOutput.Text = mehanizmcalkulyatora.ZnakTochki();
}
///<summary>
///Обработчики кнопок действия калькулятора передают
///методу DeystvieCalculatora класса mehanizmcalkulyatora
///переменную перечисления Deystvie
///</summary>
private void btn_delenie_Click(object sender, System.EventArgs e)
{
mehanizmcalkulyatora.DeystvieCalculatora (mehanizmcalkulyatora.Deystvie.Delenie);
}
private void btn_umnojenie_Click(object sender, System.EventArgs e)
{
mehanizmcalkulyatora.DeystvieCalculatora (mehanizmcalkulyatora.Deystvie.Umnojenie);
}
private void btn_minus_Click(object sender, System.EventArgs e)
{
mehanizmcalkulyatora.DeystvieCalculatora (mehanizmcalkulyatora.Deystvie.Vichitanie);
}
private void btn_plus_Click(object sender, System.EventArgs e)
{
mehanizmcalkulyatora.DeystvieCalculatora (mehanizmcalkulyatora.Deystvie.Slojenie);
}
private void btn_ravno_Click(object sender, System.EventArgs e)
{
txtOutput.Text = mehanizmcalkulyatora.ZnakRavno(); mehanizmcalkulyatora.Sbros();
}
private void btn_sbros_Click(object sender, System.EventArgs e)
{
mehanizmcalkulyatora.Sbros(); txtOutput.Text = "0";
}
}
Листинг 1.9.
Приложение готово (рис. 1.45).
Рис. 1.45. Приложение Calculator
На диске, прилагаемом к книге, вы найдете приложение Calculator (Code\Glava1\ Calculator).
Перемещение по коду, окна Types и Members
При просмотре даже не очень большого листинга, такого как рассмотренный выше, пользоваться полосой прокрутки не слишком удобно. Среда Visual Studio .NET предоставляет окна Types и Members для просмотра типа объектов и их содержимого. При выборе данного объекта в окне Types мы перемещаемся в коде к началу этого объекта (рис. 1.46) , а в окне Members приводятся члены этого объекта (рис. 1.47):
Рис. 1.46. Окно Types. Перечисление Deystvie
Рис. 1.47. Окно Members. Перечисление Deystvie
Если объект состоит из большого количества членов, удобнее выбирать в окне Members нужный член и перемещаться к его коду в листинге. Окна Types и Members, наряду с окном Class View, используются также для анализа листинга.
XML-документирование кода
При написании комментариев к коду приложения Calculator я использовал XML-комментарии. Для вставки XML-комментария достаточно трижды поставить знак слэша — ///, среда сама откроет тег, где уже можно вводить текст комментария. Использование такого способа документирования более удобно, чем обычное комментирование, — можно переносить слова на следующую строку без добавления знака комментария. Но самое главное — компилятор транслирует эти комментарии в отдельный XML-файл. Откройте окно Solution Explorer проекта Calculator и щелкните правой кнопкой на его названии. В появившемся контекстном меню выберите пункт Properties. На вкладке Configuration Properties/Build (см. рис. рис. 1.24) в поле XML Documentation File введите название выходного файла — CalcDescription.xml. Скомпилируйте приложение. Запустите проводник Windows (клавиша Windows+E) и перейдите в папку, содержащую проект Calculator. В ней появился созданный нами файл CalcDescription.xml, содержимое которого представляет собой обычный XMLдокумент:
<?xml version="1.0" ?> <doc>
<assembly>
<name>Calculator</name>
</assembly>
<members>
<member name="F:Calculator.Calc.odin">
<summary>Объявляем и инициализируем переменные, которые будут возникать на экране при нажатии соответствующих кнопок.</summary>
</member>
<member name="M:Calculator.Calc.Dispose(System.Boolean)"> <summary>Clean up any resources being used.</summary>
</member>
<member name="M:Calculator.Calc.InitializeComponent">
<summary>Required method for Designer support — do not modify the contents of this method with the code editor.</summary>
</member>
<member name="M:Calculator.Calc.Main">
<summary>The main entry point for the application.</summary> </member>
<member name="M:Calculator.Calc.btn1_Click(System.Object,System.EventArgs)">
<summary>Обработчики для кнопок обращаются к методу chislonaEkrane класса mehanizmcalkulyatora и передают ему одну из постоянных (odin, dva, tri и т.д.). Результат, возвращаемый методом, присваивается свойству Text
текстового поля txtOutput.</summary> </member>
<member name="M:Calculator.Calc.btn_delenie_Click(System.Object,System.EventArgs)"> <summary>Обработчики кнопок действия калькулятора передают методу DeystvieCalculatora класса
mehanizmcalkulyatora переменную перечисления Deystvie.</summary> </member>
<member name="F:Calculator.mehanizmcalkulyatora.peremennayaMinus">
<summary>Объявляем и инициализируем переменную, которая будет использоваться для смены знака при нажатии клавиши (+/–)</summary>
</member>
<member name="F:Calculator.mehanizmcalkulyatora.resultatVichisleniy">
<summary>Объвляем переменные для работы калькулятора: resultatVichisleniy — переменная для хранения промежуточного результата в механизме калькулятора; resultatOutput — переменная, значение которой будет сниматься с экрана и выводиться на него; tekusheeDeystvieCalculatora — хранение одного из действий калькулятора; pervoeChislo — переменная, в которую будет записываться число на экране до нажатия на одну из четырех кнопок с действием; vtoroeChislo — второе число на экране; dobavlenierazryada — при добавлении следующего разряда эта переменная примет значение true; ChislosTochkoy — при добавлении десятичного разряда (знака точки) эта переменная примет значение true</summary>
</member>
<member name="M:Calculator.mehanizmcalkulyatora.#ctor">
<summary>В конструкторе класса mehanizmcalkulyatora инициализируем переменные ChislosTochkoy и
dobavlenierazryada — при запуске калькулятора на экране нет ни разрядности, ни десятичной части.</summary> </member>
<member name="M:Calculator.mehanizmcalkulyatora.chislonaEkrane(System.String)">
<summary>В этом методе переменная resultatOutput изменяется — при вводе числа ее значение перезаписывается.</summary>
</member>
<member name="M:Calculator.mehanizmcalkulyatora.DeystvieCalculatora(Calculator.mehanizmcalkulyatora.Deystvie)
">
<summary>Метод, в котором определяется peremenDeystviya, — одно значение перечисления Deystvie, в зависимости от выбора клавиши +, –, *, или /</summary>
</member>
<member name="M:Calculator.mehanizmcalkulyatora.ZnakChisla">
<summary>При нажатии кнопки +/–- число на экране — tekusheeChislo умножается на –1, а затем результат снова присваивается переменной resultatOutput.</summary>
</member>
<member name="M:Calculator.mehanizmcalkulyatora.ZnakTochki">
<summary>При нажатии кнопки ( , ) переменная resultatOutput приобретает дробную часть.</summary> </member>
<member name="M:Calculator.mehanizmcalkulyatora.ZnakRavno">
<summary>При нажатии кнопки ZnakRavno обрабатываются значения переменнных pervoeChislo и vtoroeChislo, результат присваивается переменной resultatVichisleniy, которая затем преобразуется в resultatOutput.</summary>
</member>
<member name="M:Calculator.mehanizmcalkulyatora.Sbros">
<summary>При нажатии кнопки С (сброс) значения переменных обнуляются.</summary> </member>
<member name="T:Calculator.mehanizmcalkulyatora.Deystvie">
<summary>Создаем перечисление Deystvie для определения одного из четырех действий калькулятора.</summary> </member>
</members>
</doc>
Листинг 1.10.
Файл получается довольно длинным, и читать его в таком формате неудобно, хотя и возможно. Однако XML-код можно преобразовать в HTML, написав XSLT-файл. Кроме того, XML-документ можно сохранить в специальной базе данных для документации.
Документирующие комментарии можно преобразовать в чрезвычайно удобную форму, сгенерировав в среде Visual Studio .NET отчет Code Comment Web Report. Выберите пункт меню Tools/Build Comment Web Pages. Результатом будет набор HTML-файлов,
которые можно просмотреть непосредственно в Visual Studio .NET или с помощью браузера, перейдя в сформированную папку
CodeCommentReport (рис. 1.48):
увеличить изображение
Рис. 1.48. Страница отчета
Для увеличения функциональности создаваемого отчета при XML-документировании кода можно использовать стандартные теги. Подробное обсуждение этих вопросов выходит за рамки этой книги.
Полный список тегов можно найти в документации, входящей в комплект Visual Studio .NET.
Создание иконки для приложения
Когда мы создаем новую форму, в заголовке располагается стандартная иконка —
. Наверняка ее вид не может устраивать нас для готового приложения. Можно, конечно, воспользоваться одним из файлов .ico, находящихся на нашем компьютере, или даже иконкой из коллекции, входящей в комплект поставки Microsoft Visual Studio .NET — мы это уже делали, но лучше нарисовать уникальную иконку во встроенном редакторе иконок. Итак, File/New/File (Ctrl+N) и выбираем IconFile:
Рис. 1.49.
Запускается редактор изображений Microsoft Visual Studio.NET, внешний вид которого имеет много общего с прочими графическими редакторами:
увеличить изображение
Рис. 1.50.
Можно определить размер рисунка и его цветовую схему — Image/New Image Type (Ins):
Рис. 1.51.
Оптимальным типом изображения для иконки нашего приложения будет 32x32, 256 colors.
После завершения работы над иконкой ее можно сохранить и затем выбрать ее в свойстве Icon формы.
Аналогично можно создавать изображения курсоров — Ctrl+N и далее Cursor File.
1)WYSIWYG — "What You See Is What You Get" — "Что видишь, то и получаешь".
2)В большинстве учебников по программированию, даже написанных на русском языке, принято давать названия объектов на английском языке. В результате достигается железная строгость изложения и путаница у новичков, которые тратят дополнительные усилия на разбор названий, предопределенных средой слов, и поиском их перевода в Lingvo. Конечно, в коммерческих распределенных проектах следует придерживаться общих правил, но для большей ясности далее в некоторых местах
ябуду писать "Metod" а не "Method", "Chelovek" а не "Man".
3)Листинг приводится без области Windows Form Designer generated code
©2003-2007 INTUIT.ru. Все права защищены.
Интернет-Университет Информационных Технологий http://www.INTUIT.ru
Создание Windows-приложений на основе Visual C#
2. Лекция: Работа с элементами управления: версия для печати и PDA
Создание главного меню. Создание MDI-приложений. Перечисление MdiLayout. Вырезание, копирование и вставка текстовых фрагментов. Контекстное меню. Диалоговые окна. OpenFileDialog. SaveFileDialog. OpenFileDialog и SaveFileDialog для SDI-приложений. FontDialog. ColorDialog. StatusBar. CheckBox.
Свойство TabIndex элементов управления. Label, LinkLabel и PictureBox. Режимы запуска окон. Модификаторы доступа и наследование форм. ToolBar и ImageList. Чтение и запись файлов. Чтение и запись текстовых файлов. Object Browser и Intel Sense. Проверка существования файла. Работа с файловой системой Windows. Чтение и запись двоичных файлов. Запуск программ из приложения
Для работы с данной лекцией используйте примеры.
Элементы управления — это компоненты, обеспечивающие взаимодействие между пользователем и программой. Среда Visual Studio.NET предоставляет большое количество элементов, которые можно сгруппировать по нескольким функциональным группам.
Группа командных объектов
Элементы управления Button, LinkLabel, ToolBar реагируют на нажатие кнопки мыши и немедленно запускают какое-либо действие. Наиболее распространенная группа элементов.
Группа текстовых объектов
Большинство приложений предоставляют возможность пользователю вводить текст и, в свою очередь, выводят различную информацию в виде текстовых записей. Элементы TextBox, RichTextBox принимают текст, а элементы Label, StatusBar выводят ее. Для обработки введенного пользователем текста, как правило, следует нажать на один или несколько элементов из группы командных объектов.
Группа переключателей
Приложение может содержать несколько предопределенных вариантов выполнения действия или задачи; элементы управления этой группы предоставляют возможность выбора пользователю. Это одна из самых обширных групп элементов, в которую входят
ComboBox, ListBox, ListView, TreeView, NumericUpDown и многие другие.
Группа контейнеров
С элементами этой группы действия приложения практически никогда не связываются, но они имеют большое значение для организации других элементов управления, их группировки и общего дизайна формы. Как правило, элементы этой группы, расположенные на форме, служат подложкой кнопкам, текстовым полям, спискам — поэтому они и называются контейнерами. Элементы Panel, GroupBox, TabControl, кроме всего прочего, разделяют возможности приложения на логические группы, обеспечивая удобство работы.
Группа графических элементов
Даже самое простое приложение Windows содержит графику — иконки, заставку, встроенные изображения. Для размещения и отображения их на форме используются элементы для работы с графикой — Image List, Picture Box.
Диалоговые окна
Выполняя различные операции с документом — открытие, сохранение, печать, предварительный просмотр, — мы сталкиваемся с соответствующими диалоговыми окнами. Разработчикам .NET не приходится заниматься созданием окон стандартных процедур:
элементы OpenFileDialog, SaveFile Dialog, ColorDialog, PrintDialog содержат уже готовые операции.
Группа меню
Многие пользователи настраивают интерфейс приложений на свой вкус: одним нравится наличие определенных панелей инструментов, другим – индивидуальное расположение окон. Но в любом приложении будет присутствовать меню, содержащее в себе доступ ко всем возможностям и настройкам приложения. Элементы MainMenu, ContextMenu представляют собой готовые формы для внесения заголовков и пунктов меню.
Практическая работа с различными элементами управления будет рассмотрена в этой и последующих лекциях.
Создание главного меню
Большинство Windows-приложений оснащено главным меню, которое представляет собой иерархическую структуру выполняемых функций и команд. Практически все функции, которые можно осуществить при помощи элементов управления, имеют свой аналог в виде пункта меню.
Для создания главного меню используется элемент управления MainMenu, расположенный на панели инструментов ToolBox. Создайте новое приложение и назовите его NotepadCSharp. Установите следующие свойства формы:
Form1, форма, свойство |
Значение |
Name |
frmmain |
|
|
Icon |
Code\Glava2\NotepadCSharp\Icon\README.ICO |
|
|
|
|
Text |
Notepad C# |
|
|
WindowState |
Maximized |
Перетаскиваем элемент управления на форму. Нам предстоит заполнить строки меню следующими пунктами (рис. 2.1):
увеличить изображение
Рис. 2.1. Пункты главного меню приложения Notepad C#
Каждый пункт главного меню имеет свое окно свойств, в котором, подобно другим элементам управления, задаются значения свойств Name и Text (рис. 2.2). В поле Text перед словом New стоит знак & — так называемый амперсанд, указывающий, что N должно быть подчеркнута и будет частью встроенного клавиатурного интерфейса Windows. Когда пользователь на клавиатуре нажимает клавишу Alt и затем N, выводится подменю New.
Рис. 2.2. Свойства пункта меню New
В Windows есть еще интерфейс для работы с так называемыми быстрыми клавишами, или акселераторами. Сочетание клавиш указывают из перечисления Shortcut. Следует назначать стандартным пунктам общепринятые сочетания клавиш. Горизонтальная разделительная линия используется в тех случаях, когда надо визуально отделить сходные группы задач; для ее появления в свойстве Text пункта меню просто вводим знак тире. Для использования пунктов меню в коде, им также назначают имена (свойство Name), которые особенно важны, т.к. пунктов меню обычно бывает много. Свойства пунктов меню в приложении Notepad C# приводятся в таблице 2.1.
Таблица 2.1. Пункты главного меню приложения Notepad C#
Name |
Text |
Shortcut |
mnuFile |
&File |
|
|
|
|
mnuNew |
&New |
CtrlN |
|
|
|
mnuOpen |
&Open |
CtrlO |
|
|
|
mnuSave |
&Save |
CtrlS |
|
|
|
menuItem5 |
- |
|
|
|
|
mnuExit |
&Exit |
AltF4 |
|
|
|
mnuEdit |
&Edit |
|
|
|
|
mnuCut |
Cu&t |
CtrlX |
|
|
|
mnuCopy |
&Copy |
CtrlC |
|
|
|
mnuPaste |
&Paste |
CtrlV |
|
|
|
mnuDelete |
&Delete |
Del |
|
|
|
mnuSelectAll |
&SelectAll |
CtrlA |
|
|
|
mnuFormat |
F&ormat |
|
|
|
|
mnuFont |
Font… |
|
|
|
|
mnuColor |
Color… |
|
|
|
|
mnuWindow |
&Window |
|
mnuArrangeIcons Arrange Icons
mnuCascade Cascade
mnuTileHorizontal Tile Horizontal
mnuTileVertical |
Tile Vertical |
mnuHelp |
? |
|
|
mnuAbout |
About Programm... |
Вы можете самостоятельно выбрать сочетания клавиш, не указанные в табл. 2.1, для соответствующих пунктов меню.
Создание MDI-приложений
Такие программы, как блокнот и Microsoft Paint, относятся к SDI (Single — Document Interface) приложениям, способным работать только с одним документом. Другие, такие как Microsoft Word или Adobe Photoshop, поддерживают работу сразу с несколькими документами и называются MDI (Multiple — Document Interface) приложениями (рис. 2.3 и 2.4).
увеличить изображение
Рис. 2.3. SDI приложение Microsoft Paint
увеличить изображение
Рис. 2.4. MDI-приложение Adobe Photoshop
В MDI-приложениях главная форма содержит в себе несколько документов, каждый из которых является холстом в графических программах или полем для текста в редакторах. Продолжим работу над приложением Notepad C#. В окне Solution Explorer щелкаем правой кнопкой на имени проекта и в появившемся контекстном меню выбираем Add/ Add Windows Form… . В появившемся окне называем форму – blank.cs. В нашем проекте появилась новая форма — будем называть ее дочерней. В режиме дизайна перетаскиваем на нее элемент управления RichTextBox: в отличие от элемента textBox, размер содержимого текста в нем не ограничивается 64 Кб; кроме того, RichTextBox позволяет редактировать цвет текста, добавлять изображения. Свойству Dock этого элемента устанавливаем значение Fill (рис. 2.5):
Рис. 2.5. Свойство Dock элемента RichTextBox
Переходим в режим дизайна формы Frmmain и устанавливаем свойству IsMdiContainer значение true. Цвет формы при этом становится темно-серым. Новые документы будут у нас появляться при нажатии пункта меню New (которому мы установили сочетание клавиш Ctrl+N), поэтому дважды щелкаем в этом пункте и переходим в код:
private void mnuNew_Click(object sender, System.EventArgs e)
{
//Создаем новый экземпляр формы frm blank frm = new blank();
//Указываем, что родительским контейнером //нового экземпляра будет эта, главная форма. frm.MdiParent = this;
//Вызываем форму frm.Show();
}
Запускаем приложение. Теперь при нажатии клавиш Ctrl+N или выборе пункта меню New появляется несколько окон, расположенных каскадом. Однако заголовок у них всех одинаковый — blank. При создании нескольких документов, например в
Microsoft Word, они называются ДокументN, где N — номер документа. Переключаемся в код формы blank, и в классе blank объявляем переменную DocName:
public string DocName = "";
Переключаемся в код формы frmmain и в классе frmmain объявляем переменную openDocuments:
private int openDocuments = 0;
Присваиваем переменной DocName часть названия по шаблону, в который включен счетчик числа открываемых документов, затем это значение передаем свойству Text создаваемой формы frm:
private void mnuNew_Click(object sender, System.EventArgs e)
{
blank frm = new blank();
frm.DocName = "Untitled " + ++openDocuments; frm.Text = frm.DocName;
frm.MdiParent = this; frm.Show();
}
