Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 12 лет назад пользователемdocs.gsu.by
1 Создание Windows- приложений Лекция 11
2 Порядок создания Windows-приложения Для создания нового проекта нужно выполнить команду: File – New Project… - Windows Application Средой будет сформирован шаблон приложения и заготовка формы Form1 на вкладке Form1.cs [Design] в центральной части окна. Слева будет отображена палитра компонентов (панель инструментов) ToolBox Если она отсутствует, открыть ее можно командой меню View –ToolBox (Ctrl+Alt+X)
3 Вид экрана:
4 Создание приложения состоит из двух этапов: Визуальное проектирование – создание интерфейса приложения (конструирование форм). Разработка и реализация алгоритма решения задачи путем написания процедур обработки событий. На I этапе нужно разработать вид всех окон приложения, определить их иерархию, а затем в среде создать нужное количество форм, разместить на них все необходимые компоненты (элементы управления) и установить их свойства с помощью окна свойств Properties.
5 Свойства отражаются в алфавитном порядке или сгруппированы по категориям. Выбор способа отображения осуществляется с помощью кнопок Categorized – группировка по категориям. Alphabetical – группировка по алфавиту. Для размещения в окне формы элемента управления можно дважды щелкнуть по соответствующему значку в палитре компонентов или сделать один щелчок на компоненте и один щелчок на форме.
6 Пиктограмма Pointer вверху списка в окне ToolBox не является компонентом. Она позволяет пользоваться курсором мыши без переноса элемента управления на форму. На II этапе нужно разработать алгоритмы всех подпрограмм и установить, в результате наступления каких событий нужно будет выполнить созданные подпрограммы. Затем создать обработчики событий – методы, которые будут выполнены при наступлении того или иного события. Шаблон текста приложения уже создан. Увидеть текст файла, в котором будут размещаться обработчики событий, можно, щелкнув правой кнопкой мыши в окне Solution Explorer на файле Form1.cs и выбрав в контекстном меню команду View Code.
7 При этом откроется вкладка Form1.cs с заготовкой кода. К тому же результату приведет щелчок правой кнопкой мыши в любом месте вкладки Form1.cs [Design] и выбор команды View Code. При создании приложений наиболее часто используются следующие события: Activated – получение формой фокуса ввода. Click, DoubleClick – одинарный и двойной щелчки мышью Closed – закрытие формы. Load – загрузка формы.
8 Для автоматического создания шаблона обработчика события нужно в окне Properties перейти на вкладку Events (с изображением молнии). Откроется список всех событий, которые может сгенерировать выбранный компонент. KeyPress – нажатие клавиши, имеющей ASCII-код. MouseMove – перемещение мыши и др. Затем дважды щелкнуть на поле справа от имени нужного события. При этом появляется вкладка окна редактора кода с заготовкой соответствующего обработчика.
9 Например, обработчик события нажатия кнопки button1: private void button1_Click(object sender, EventArgs e) { } Тот же эффект будет получен при выполнении двойного щелчка по кнопке button1 Имя обработчика события генерируется по следующему правилу: ИмяЭлементаУправления_ИмяСобытия
10 Шаблон Windows-приложения При создании приложения автоматически создаются несколько файлов. Рассмотрим основные. Файл Form1.cs: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms;
11 namespace WindowsApplication1 { public partial class Form1 : Form { Объявляется класс главной формы приложения, производный от класса Form пространства Windows.Forms Спецификатор partial означает частичное описание класса. Другая часть этого класса будет содержаться в другом файле. public Form1( ) // конструктор { InitializeComponent(); // статический закрытый метод // класса Form1, код которого автоматически // генерируется средой при добавлении новых компонентов } }}
12 Именно в этом файле будут автоматически создаваться обработчики событий. Файл Form1.Designer.cs (чтобы его увидеть, нужно дважды щелкнуть по его имени в окне Solution Explorer): namespace WindowsApplication1 { partial class Form1 // продолжение описания класса { private System.ComponentModel.IContainer components = null; // описание поля интерфейсного типа – контейнера для // компонентов:
13 protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } // Этот метод будет при закрытии формы автоматически // удалять все ресурсы
14 #region Windows Form Designer generated code // директива препроцессора, определяющая начало фрагмента // кода, который можно будет свернуть и развернуть // средствами редактора кода private void InitializeComponent() { this.SuspendLayout( ); // метод класса Control, который // временно приостанавливает размещение компонента
15 this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(446, 273); this.Name = "Form1"; this.Text = "Form1"; this.ResumeLayout(false);
16 } #endregion // директива препроцессора, определяющая конец фрагмента // кода, который можно будет свернуть и развернуть // средствами редактора кода }} При размещении на форме компонента в методе InitializeComponent() автоматически происходят изменения.
17 Например, если на форме разместить кнопку, в классе появится закрытое поле: private System.Windows.Forms.Button button1; А в методе появятся следующие операторы: this.button1 = new System.Windows.Forms.Button(); this.button1.Location = new System.Drawing.Point(77, 42); this.button1.Name = "button1"; this.button1.Size = new System.Drawing.Size(75, 23); this.button1.TabIndex = 0; this.button1.Text = "button1"; this.button1.UseVisualStyleBackColor = true;
18 this.Controls.Add(this.button1); При создании обработчика события в метод InitializeComponent() автоматически добавляется оператор, который регистрирует обработчик события. Например, при создании метода-обработчика события нажатия кнопки button1 в метод InitializeComponent() будет добавлен оператор: this.button1.Click += new System.EventHandler(this.button1_Click); Обработчики события можно также создавать вручную.
19 Например, пусть автоматически создан обработчик события private void button1_Click(object sender, EventArgs e) { MessageBox.Show("Скоро конец лекции"); } Можно в классе Form1 создать еще один обработчик этого же события: private void button1_Click_1(object sender, EventArgs e) { MessageBox.Show("Ура!!!"); }
20 Тогда в метод InitializeComponent() нужно добавить оператор: this.button1.Click += this.button1_Click_1; В этом случае при нажатии на кнопку button1 во время выполнения программы будут по очереди выполнены оба метода. Если планируется использовать в работе программы больше одного окна, нужно создать соответствующее количество форм командой меню: Project – Add Windows Form… - Windows Form При этом автоматически будут созданы файлы Form2.cs, Form2.Designer.cs, Form3.cs, Form3.Designer.cs, и т.д.
21 Файл Program.cs: using System; using System.Collections.Generic; using System.Windows.Forms; namespace WindowsApplication1 { static class Program {
22 [STAThread] // атрибут задает модель потоков в рамках // модели СОМ static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); }
23 Класс Control Класс Control является базовым для всех отображаемых элементов управления. Свойства класса Control: Anchor – определяет, какие края элемента управления будут привязаны к краям родительского контейнера. Например: button1.Anchor = (System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right);
24 В окне свойств нужно определять так: Visible – показывает, видим ли элемент управления. true – видим; false – невидим. BackColor – определяет цвет фона элемента управления. Тип этого свойства: System.Drawing.Color – структура в пространстве имен System.Drawing, в которой определяются красная, синяя и зеленая составляющие цвета. Например, button1.BackColor = System.Drawing.SystemColors.ControlDark;
25 Здесь SystemColors – класс, в котором каждое свойство представляет собой структуру типа System.Drawing.Color и определяет соответствующий системный цвет. ControlDark – это свойство. Можно также: button1.BackColor = System.Drawing.Color.FromArgb (((int)(((byte)(192)))), ((int)(((byte)(192)))), ((int)(((byte)(255))))); Здесь метод FromArgb создает структуру типа System.Drawing.Color, в поля которой заносится доля содержания красного, зеленого и синего цвета. Для придания прозрачности можно использовать значение этого свойства Color.Transparent.
26 BackGroundImage – фоновое изображение элемента управления. Задается в окне свойств щелчком по кнопке …, установкой в появившемся окне переключателя local resourse и выбором нужного файла после нажатия кнопки Import. BackGroundImageLayout – устанавливает способ размещения фонового рисунка. Выбирается из списка. Например при значении этого свойства Stretch размер фонового рисунка соответствует размеру элемента управления.
27 Enabled – показывает, активизирован элемент управления или нет (может ли пользователь взаимодействовать с ним). true – активизирован, false – нет. button2.Enabled = false; Focused – показывает, имеет ли элемент управления фокус ввода (т.е. ввод с клавиатуры относится к этому элементу). true – имеет фокус ввода, false – нет. Это свойство определено только для чтения. Поэтому его нельзя установить в окне свойств.
28 Font – определяет параметры шрифта для отображения текста. Для установки значения для этого свойства нужно нажать кнопку … и в открывшемся окне Шрифт задать все необходимые параметры. Text – текст, относящийся к элементу управления. Местоположение и вид зависят от типа элемента управления. Например, для формы – это текст заголовка, для кнопки – надпись на ней. Тип этого свойства – string. button2.Text = "Вычислить";
29 TabIndex – определяет порядок табуляции элемента управления (задает порядковый номер элемента). Тип – int. При нажатии клавиши Tab фокус ввода перемещается на элементы управления в порядке возрастания значения их свойства TabIndex. Например, button2.TabIndex = 1; TabStop – определяет возможность перемещения от элемента к элементу с помощью клавиши Tab. true – можно, false – нельзя. TextAlign – выравнивание текста элемента управления. Может принимать значения TopCenter, MiddleCenter, TopLeft, BottomRight и т.д.
30 Точнее System.Drawing.ContentAlignment.BottomRight; ContentAlignment – это перечисление с вышеуказанными константами. Size – определяет размеры элемента управления. Представляет собой структуру со свойствами Height и Width. button2.Size = new System.Drawing.Size(77, 24); Dock – сторона родительского контейнера для стыковки элемента управления. Стыковка позволяет растягивать элементы вдоль боковых сторон контейнеров. В большинстве случаев родительским контейнером является форма, однако и другие элементы могут служить родительским контейнером. Например, панель.
31 Location - местоположение верхнего левого угла элемента относительно контейнера. Основные методы класса Control Focus( ) – передача фокуса ввода элементу управления. Например, richTextBox1.Focus(); Возвращает значение типа bool. Hide( ) – сокрытие элемента управления: устанавливает значение false свойства Visible. Тип void. Show( ) – показ элемента управления: устанавливает значение true свойства Visible. Тип void. С помощью окна свойств можно задавать спецификатор доступа элемента, определяя свойство Modifiers.
32 Например, button1.Hide( ) Класс Form. Класс Form представляет собой заготовку пустого окна. От этого класса наследуются все классы форм приложения. Каждое приложение содержит одно главное окно. Та форма, которая передается в качестве параметра метода Run в методе Main, будет главной. Например, Application.Run(new Form1( ));
33 Дополнительные свойства класса Form: FormBorderStile – определяет стиль рамки вокруг формы. Opacity – определяет степень прозрачности в процентах. ControlBox- определяет, будут ли присутствовать стандартная кнопка системного меню в левом углу заголовка формы и системные кнопки в правом углу. MaximizeBox, MinimizeBox – определяют наличие на форме кнопок восстановления и свертывания. StartPosition - определяет начальную позицию при открытии окна.
34 ShowInTaskbar – определяет, будет ли форма отображаться на панели задач. AcceptButton- задает кнопку, которая будет активизирована при нажатии клавиши Enter, а в случае открытия окна как диалогового, задает кнопку, которая означает подтверждение введенной информации и закрывает окно. CancelButton- задает кнопку, которая будет активизирована при нажатии клавиши Esc, а в случае открытия окна как диалогового, задает кнопку, которая означает отмену введенной информации и закрывает окно. TopMost – определяет, будет ли форма всегда отображаться поверх других форм. True –будет, false – нет.
35 Методы класса Form: Activate( ) – активизирует форму и передает ей фокус ввода. Например, если f – объект класса Form (или производного от него), то активизировать форму f можно с помощью оператора f.Activate(); При этом, если форма не была отображена на экране, она остается невидимой. Close( ) – закрывает форму. Например, f.Close( ) Для текущей формы this.Close(); или просто Close();
36 Show( ) – отображает форму в немодальном режиме (это не дополнительный метод, а унаследованный от класса Control. Например, f.Show(); ShowDialog( ) – отображает форму как диалоговое окно. Окно отображается в модальном режиме. При закрытии окна методом формируется результат выполнения из значений перечисления DialogResult (OK, Cancel). Предполагается, что в окне есть две кнопки, одна из которых зафиксирована в свойстве AcceptButton, а другая – в свойстве CancelButton.
37 Ввод данных с помощью элементов управления. Для ввода символов, строк и чисел можно использовать поле ввода TextBox. Для пояснения к вводимым данным можно использовать компонент Label. Элемент управления Label (метка). Представляет собой поле для размещения текста на форме. Текст, который будет отображаться на форме, помещается в свойство Text.
38 Это выполняется либо с помощью окна свойств компонентов, либо в программе с помощью оператора присваивания:.Text = ; Например, label1.Text = "Ку-ку!"; Элемент управления TextBox (текстовое поле). Это текстовый редактор. Текст сохраняется в свойстве Text. Свойства: Name – имя компонента ReadOnly – устанавливает доступ только для чтения.
39 PasswordChar – задает символ, который заменяет вводимые символы. Multiline – определяет, может ли текст занимать больше одной строки (true – может, false - нет). ScrollBars – для многострочных текстовых полей указывает на появление полосы прокрутки. Для ввода строки можно использовать оператор: =.Text; Например, string s = textBox1.Text;
40 Для ввода числа необходимо выполнять преобразование строки в число. Например, int s = Convert.ToInt32(textBox1.Text); double s = Convert.ToDouble(textBox1.Text); Чтобы избежать ошибок при вводе чисел, можно использовать контролируемый блок. Например: double s = 0; try { s = Convert.ToDouble(textBox1.Text); } catch { MessageBox.Show("Неправильный ввод числа!"); };
41 Можно организовать завершение ввода данных в поле ввода TextBox при нажатии определенной клавиши, создав обработчик события KeyPress. Например: private void textBox1_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar = = (char) ConsoleKey.Escape) { string s = textBox1.Text;} … }
42 Для вывода данных можно также использовать метки и поля ввода, помещая в свойство Text этих компонентов преобразованные к строковому типу данные. Например, label2.Text = s; label2.Text = x.ToString( ); textBox2.Text = x.ToString( ); Например, пусть требуется создать программу для получения долларового эквивалента заданной суммы в рублях.
43 Форма могла бы выглядеть так: Тогда обработчик события нажатия кнопки будет выглядеть так:
44 private void button1_Click(object sender, EventArgs e) { double s = 0; try { s = Convert.ToDouble(textBox1.Text); } catch { MessageBox.Show("Неправильный ввод числа!"); }; double ss = s / 2300; textBox2.Text = ss.ToString(); }
45 Ввод одномерного массива Для ввода массива можно использовать компонент RichTextBox (многострочный текстовый редактор) Основные свойства: Text – содержит редактируемый текст (тип string). Lines – содержит массив строк типа string, элементами которого являются строки редактируемого текста. ReadOnly – устанавливает доступ только для чтения. Ниже приведен пример ввода одномерного массива в виде столбца.
46 string[ ] s = richTextBox1.Lines; int n = s.Length; int[ ] x = new int[n]; int j = 0; for (int i = 0; i < n; i++) { try {x[j] = Convert.ToInt32(s[i]); j=j+1; } catch {} }
47 int[] y = new int[j]; for (int i = 0; i < j; i++) y[i] = x[i]; Вид компонента с введенными данными: В массив будут записаны только числа.
48 Для ввода массива можно использовать также компонент класса DataGridView который представляет собой таблицу для редактирования данных При размещении на форме он сначала выглядит так: Если окна DataGridView Tasks нет, то отобразить его можно щелкнув мышкой по стрелке на верхней границе компонента.
49 Добавить столбцы в таблицу можно следующими способами: - В окне DataGridView Tasks перейти по ссылке Add Column В появившемся окне установить все необходимые параметры:
50 - В окне DataGridView Tasks перейти по ссылке Edit Columns и в появившемся окне нажать кнопку Add. - В окне свойств установить свойство Columns (щелкнуть по кнопке с многоточием) и в появившемся окне нажать кнопку Add. Компонент примет вид: Чтобы удалить столбец, нужно в окне DataGridView Tasks перейти по ссылке Edit Columns и в появившемся окне нажать кнопку Remove. Можно также воспользоваться свойством Columns.
51 Класс DataGridView имеет два индексатора. Оба они возвращают значение типа DataGridViewCell – объект, содержащий информацию о ячейке таблицы, и имеют два индекса. В первом из них оба индекса целые и обозначают номер столбца и номер строки. Пример обращения: dataGridView1[0, 1] Во втором индексаторе первый индекс имеет тип string и обозначает имя столбца, а второй индекс имеет тип int и обозначает номер строки. Пример обращения: dataGridView1["Column1", 1] Чтобы получить доступ к значению в ячейке таблицы, можно использовать свойство Value класса DataGridViewCell (тип string): dataGridView1[0, 1].Value
52 Основные свойства: RowCount – число строк в таблице. (Не отражается в окне свойств) ColumnCount – число столбцов в таблице. RowHeadersVisible – определяет, выводится ли столбец с заголовками строк (true – выводится, false – нет). ColumnHeadersVisible – определяет, выводится ли строка с заголовками столбцов (true – выводится, false – нет). CurrentCell – делает некоторую ячейку активной или обращается к активной ячейке. Тип этого свойства DataGridViewCell.
53 Пример, иллюстрирующий, как сделать какую- то ячейку текущей: dataGridView1.CurrentCell = dataGridView1[0, 1]; Чтобы получить доступ к значению, размещенному в текущей ячейке, можно использовать свойство Value класса DataGridViewCell Например: dataGridView1.CurrentCell.Value Рассмотрим пример, демонстрирующий возможность ввода одномерного массива с помощью компонента DataGridView.
54 Пусть компонент при выполнении программы выглядит следующим образом (ввод массива целых чисел в столбец): Тогда фрагмент программы для считывания данных из таблицы в массив может выглядеть так: int n = dataGridView1.RowCount-1; int[ ] x = new int[n]; for (int i = 0; i < x.Length; i++) x[i] = Convert.ToInt32(dataGridView1["Column1", i].Value); или dataGridView1[0, i].Value)
55 Можно организовать ввод массива в строку. При этом размерность массива вводить с клавиатуры. Чтобы при вводе элемента массива не создавалась новая строка нужно для свойства AllowUserToAddRows таблицы установить значение false. Чтобы при вводе размерности массива автоматически изменялось количество столбцов в таблице и выводились номера элементов в качестве заголовков столбцов, нужно создать обработчик события TextChanged компонента TextBox.
56 private void textBox1_TextChanged(object sender, EventArgs e) { if (textBox1.Text != "") dataGridView1.ColumnCount = Convert.ToInt32(textBox1.Text); dataGridView1.RowCount = 1; for (int i = 0; i < dataGridView1.ColumnCount; i++) dataGridView1.Columns[i].HeaderText = i.ToString(); } Тогда фрагмент программы для ввода одномерного массива в строку может выглядеть так:
57 int n = Convert.ToInt32(textBox1.Text); for (int i = 0; i < x.Length; i++) x[i] = Convert.ToInt32(dataGridView1[i, 0].Value); Ввод матрицы с помощью компонента DataGridView Для ввода матрицы понадобятся два компонента для ввода размерности. Для каждого из них создать обработчик события TextChanged. Например, private void textBox2_TextChanged(object sender, EventArgs e) { if (textBox2.Text != "") dataGridView2.RowCount = Convert.ToInt32(textBox2.Text); }
58 private void textBox3_TextChanged(object sender, EventArgs e) { if (textBox3.Text != "") dataGridView2.ColumnCount = Convert.ToInt32(textBox3.Text); } При этом нужно установить свойства компонента dataGridView2 AllowUserToAddRows - false RowHeadersVisible - false ColumnHeadersVisible - false
59 Тогда фрагмент программы для ввода матрицы целых чисел может выглядеть так: int n = Convert.ToInt32(textBox2.Text); int m = Convert.ToInt32(textBox3.Text); int[,] x = new int[n, m];
60 for (int i=0; i
61 for (int i = 0; i < x.GetLength(0); i++) for (int j = 0; j < x.GetLength(1); j++) dataGridView3[j, i].Value = x[i, j]; Пример 2. Вывести массив структур, содержащий информацию о студентах. Пусть структура имеет следующее описание: public struct Student { public string fam; public int ocenka; public int stip; }
62 st – массив экземпляров структур: Student[ ] st; Тогда вывод массива st можно выполнить с помощью следующего фрагмента: dataGridView1.RowCount = st.Length; for (int i = 0; i < st.Length; i++) { dataGridView1[0, i].Value = st[i].fam; dataGridView1[1, i].Value = st[i].ocenka; dataGridView1[2, i].Value = st[i].stip; }
63 Результат: Конечно, компонент dataGridView1 должен быть предварительно «настроен». Полезно установить значение свойства ReadOnly false, а значение свойства AutoSizeColumnsMode – AllCells.
64 Создание многооконных приложений Чтобы создать новую форму, нужно выполнить команду меню Project - Add Windows Form… - Windows Form - Add Чтобы иметь возможность доступа к компонентам созданной формы, эти компоненты должны иметь спецификатор доступа public. Поэтому в окне свойств для этих компонентов необходимо установить значение «свойства» Modifiers - public. Прежде чем использовать элементы управления созданной формы, нужно создать объект созданного класса, а затем по имени этого объекта обращаться к элементам управления, а также ко всем элементам класса.
65 Например, Form3 f3 = new Form3( ); f3.textBox1.Text = "Привет!"; f3.ShowDialog( ); Для создания главного меню можно использовать компонент класса MenuStrip Создание структуры меню и ввод названий команд интуитивно понятно и осуществляется в интерактивном режиме. Для создания обработчика события выбора пункта меню достаточно выполнить двойной щелчок на соответствующем пункте. В результате в класс формы будет вставлен метод вида:
66 private void обАвтореToolStripMenuItem_Click(object sender, EventArgs e) { } Для вставки изображений можно использовать компонент класса PictureBox Основные свойства: Image – тип Image, позволяет задавать выводимое в компоненте изображение и всевозможные его параметры.
67 Для выбора графического файла, из которого будет импортировано изображение, нужно в окне свойств нажать кнопку с многоточием рядом со свойством Image, в появившемся окне установить переключатель Local resource и нажать кнопку Import, после чего выбрать нужный файл. Свойство SizeMode позволяет установить режим установки размеров изображения по отношению к размерам компонента. При значении этого свойства StretchImage размер изображения приводится в соответствие с размерами компонента Image.
68 Компонент RadioButton Этот компонент представляет собой переключатель, предназначенный для выбора одного из нескольких взаимоисключающих вариантов. На форму нужно поместить как минимум два таких компонента. Свойства: Checked – true если компонент выбран (переключатель включен), в противном случае false. Среди переключателей только у одного это свойство может быть true.
69 В программе для выбора действия с помощью переключателя RadioButton нужно использовать обращение к свойству Checked. Например: if (radioButton1.Checked) {textBox1.Text = "Привет!"; }
70 Компонент ListBox (список) Представляет список, с помощью которого можновыбрать один или несколько пунктов. Свойства: Items – содержит набор строк – названий пунктов в списке SelectedIndex – содержит индекс элемента списка, имеющего фокус ввода. Раскрывающийся список ComboBox. Свойства: Items – содержит набор строк – названий пунктов в списке SelectedIndex – содержит индекс элемента списка, имеющего фокус ввода.
71 Панель GroupBox Служит для группировки элементов на форме, позволяет выводить название для группы компонентов. Панель Panel Также служит для группировки элементов на форме. Создание и использование диалоговых окон (окно сохранения файла, окно открытия файла, окно установки параметров шрифта и т.д.). Работа с диалоговыми окнами осуществляется в три этапа: Размещение соответствующего компонента на форме ( в момент работы программы этот компонент не виден, видно только создаваемое диалоговое окно)
72 Вызов в программе метода ShowDialog. Именно после обращения к этому методу на экране появляется соответствующее диалоговое окно, которое является модальным. Анализ результата вызова метода ShowDialogи использование в программе результатов диалога. Метод возвращает результат типа DialogResult (перечисление): Abort, OK, No, Cancel и др. SaveFileDialog – диалог сохранения файла. ОpenFileDialog - диалог открытия файла.
73 Пример использования в программе для открытия файла: if (openFileDialog1.ShowDialog( ) = = DialogResult.OK) {StreamReader f = new StreamReader(openFileDialog1.FileName); string s = f.ReadToEnd(); f.Close();}
74 Пример. Написать Windows-приложение, работающее под управлением меню: Файл Новый Открыть Сохранить Выход Обработка матрицы Сумма… Произведение Об авторе
75 Для решения задачи создать класс «Матрица», в котором описать следующие элементы: закрытое поле – матрица целых чисел, индексатор для доступа к элементам поля-массива, конструктор с параметрами, перегруженные методы для поиска суммы всех элементов матрицы и суммы элементов заданной строки, метод для вычисления произведения элементов.
76 При выполнении команды Файл - Новый открывается таблица DataGridView для ввода матрицы, появляется кнопка Сохранить, кнопка Обработка и панель с переключателями для выбора вида вычислений в матрице. Пользователь получает возможность ввода матрицы. При выполнении команды Файл – Открыть открывается диалоговое окно открытия файла. После выбора файла открывается таблица DataGridView с загруженной матрицей, появляется кнопка Обработка и панель с переключателями для выбора вида вычислений в матрице. При выполнении команды Файл – Сохранить открывается диалоговое окно сохранения файла. После ввода имени матрица сохраняется в соответствующем файле. То же самое происходит при нажатии кнопки Сохранить. При выполнении команды Файл – Произведение… появляется окно с переключателями, определяющими, какой вид произведения нужно найти. При выполнении команды Об авторе открывается окно с информацией о разработчике программы с фотографией.
77 Вид главного окна при запуске:
78 Вид окна после выполнения команды Файл-Новый:
79 Окно, открываемое после выполнения команды меню об авторе:
80 Окно после выполнения команды Обработка-Сумма… или нажатия кнопки Вычислить при установленном переключателе Сумма:
81 Создадим класс Матрица в файле form1.cs. Этот класс должен располагаться после класса Form1!!! class Matrica { int[,] a; public Matrica(int n,int m) { a = new int[n, m]; }
82 public Matrica(DataGridView DgV) { int n = DgV.RowCount; int m = DgV.ColumnCount; a = new int[n,m]; } public int this[int i, int j] { get { return a[i, j]; } set { a[i, j] = value; } }
83 public int GetLength(int p) { return a.GetLength(p); } public void read( DataGridView DgV) { for (int i = 0; i < a.GetLength(0); i++) for (int j = 0; j < a.GetLength(1); j++) a[i, j] = Convert.ToInt32(DgV[j, i].Value); }
84 public void write(DataGridView DgV) { DgV.RowCount = a.GetLength(0); DgV.ColumnCount = a.GetLength(1); for (int i = 0; i < a.GetLength(0); i++) for (int j = 0; j < a.GetLength(1); j++) DgV[j, i].Value = a[i, j];} public int summa( ) { int S = 0; foreach (int x in a) S = S + x; return S; }
85 public int summa(int ns) { int S=0; for (int j = 0; j < a.GetLength(1);j++ ) S = S + a[ns, j]; return S; } public int proizv( ) {…} }
86 private void обАвтореToolStripMenuItem_Click (object sender, EventArgs e) { (new Form2()).Show(); } private void textBox1_TextChanged(object sender, EventArgs e) { if (textBox1.Text != "") dataGridView1.RowCount = Convert.ToInt32(textBox1.Text); }
87 private void textBox2_TextChanged(object sender, EventArgs e) { if (textBox2.Text != "") dataGridView1.ColumnCount = Convert.ToInt32(textBox2.Text); } private void Save(Matrica A) { if (saveFileDialog1.ShowDialog() == DialogResult.OK) {
88 StreamWriter f = new StreamWriter(saveFileDialog1.FileName); for(int i=0;i
89 private void выходToolStripMenuItem_Click (object sender, EventArgs e) { Close(); } private void новыйToolStripMenuItem_Click(object sender, EventArgs e) { panel1.Visible = true; dataGridView1.Visible = true; button1.Visible = true; groupBox1.Visible = true; }
90 private void button1_Click(object sender, EventArgs e) { Matrica A = new Matrica(dataGridView1); A.read( dataGridView1); Save(A); } private void сохранитьToolStripMenuItem_Click(object sender, EventArgs e) { Matrica A = new Matrica(dataGridView1); A.read(dataGridView1); Save(A); }
91 private void button2_Click(object sender, EventArgs e) { Matrica A = new Matrica(dataGridView1); A.read(dataGridView1); if (radioButton1.Checked) { Form3 f3 = new Form3( );int S; if (f3.ShowDialog( )==DialogResult.OK) { if (f3.comboBox1.SelectedIndex == 0) S=A.summa( );
92 else S=A.summa(2); label3.Text = "Cумма"; textBox3.Text = S.ToString(); ; }
93 private void произведениеПоложительныхЭлементовToolStripMenuItem_Click (object sender, EventArgs e) { Matrica A = new Matrica(dataGridView1); A.read(dataGridView1); A.proizv(); }
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.