Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
ВМСиС 2013
Лабораторная работа № 23
Тема: Динамическое создание кнопок в среде #Develop и Visual Studio
Цель: Изучить технологию динамического создания компонентов программы и методов обращения к ним на примере программы «Калькулятор».
Внешний вид работающей программы, которую необходимо разработать приведен на рис.1.
Рис. 1.
Пояснения:
Статически (используя палитру компонентов) установить только один компонент метку для визуализации результатов ввода или вычислений. Кнопки создаются без палитры самой программой.
Создание проекта:
- Создать папку для программы (в именах пути русские буквы не использовать).
- Выбрать последовательность вложенных меню: <File><New><Project>, и в появившемся окне выбрать язык “Visual C#” и вид программы “Windows Application”.
- Указать имя и путь для проекта в нижних строках окна и сохранить его. Рекомендуется указывать номер группы, номер работы и инициалы исполнителей работы.
- Расположить на форме компонент-метку (для визуализации результатов ввода или вычислений калькулятора).
- Ввести текст программы, которая содержит только один обработчик прерываний «Button_Click», который создается вручную. Разберитесь в назначении использованных операторов.
- Выполнить индивидуальное задание в соответствии с вариантом.
- Выполнив задание, предъявить его преподавателю для проверки.
Таблица вариантов.
№ варианта |
Задание |
Исполнитель |
1 |
Дополнить калькулятор кнопкой вычисления абсолютной величины. |
|
2 |
Дополнить калькулятор кнопкой вычисления косинуса. |
|
3 |
Дополнить калькулятор кнопкой вычисления тангенса |
|
4 |
Дополнить калькулятор кнопкой вычисления деления |
|
5 |
Дополнить калькулятор кнопкой вычисления остатка целочисленного деления |
|
6 |
Дополнить калькулятор кнопкой вычисления арктангенса |
|
7 |
Дополнить калькулятор кнопкой вычисления арксинуса |
|
8 |
Дополнить калькулятор кнопкой вычисления логарифма |
|
9 |
Дополнить калькулятор кнопкой вычисления экспоненты |
|
10 |
Дополнить калькулятор кнопкой вычисления квадратного корня |
|
11 |
Дополнить калькулятор кнопкой вычисления гиперболического синуса |
|
12 |
Дополнить калькулятор кнопкой вычисления арккосинуса |
|
13 |
||
14 |
||
15 |
||
16 |
||
17 |
||
18 |
Пример текста разрабатываемой программы в среде #Develop
Пример текста разрабатываемой программы в среде Visual Studio
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { private const int bw = 40, bh = 22; // размер кнопки private const int dx = 5, dy = 5; // расстояние между кнопками // кнопки private Button[] btn = new Button[15]; // текст на кнопках char[] btnText = {'7','8','9','+', '4','5','6','-', '1','2','3','=', '0',',','c'}; // кнопку будем идентифицировать // по значению свойства Tag int[] btnTag = {7,8,9,-3, 4,5,6,-4, 1,2,3,-2, 0,-1,-5}; private double ac = 0; // аккумулятор private int op = 0 ; // код операции private Boolean fd; // fd == true - ждем первую цифру числа, // например, после нажатия кнопки + // fd == false - ждем следующую // цифру или нажатие кнопки операции; public Form1() { InitializeComponent(); fd = true; // создать кнопки int x, y; // координаты кнопки // установить размер клиентской области формы this.ClientSize = new Size(4*bw + 5*dx, 5*bh + 7*dy); // задать размер и положение индикатора label1.SetBounds(dx, dy, 4*bw + 3*dx, bh); label1.Text = "0"; y = label1.Bottom + dy ; // создать кнопки int k =0; // номер кнопки for ( int i=0; i < 4; i++) { x = dx; for (int j = 0; j < 4; j++) { if ( !((i == 3 ) && (j == 0))) { // создать и настроить кнопку btn[k] = new Button(); btn[k].SetBounds(x, y, bw, bh); btn[k].Tag = btnTag[k]; btn[k].Text = btnText[k].ToString();
// задать функцию обработки // события Click this.btn[k].Click += new System.EventHandler(this.Button_Click); if (btnTag[k] < 0) { // кнопка операции btn[k].BackColor = SystemColors.ControlLight; } // поместить кнопку на форму this.Controls.Add(this.btn[k]); x = x + bw + dx; k++; } else // кнопка ноль { // создать и настроить кнопку btn[k] = new Button(); btn[k].SetBounds(x, y, bw * 2 + dx, bh); btn[k].Tag = btnTag[k]; btn[k].Text = btnText[k].ToString(); // задать функцию обработки // события Click this.btn[k].Click += new System.EventHandler(this.Button_Click); // поместить кнопку на форму this.Controls.Add(this.btn[k]); x = x + 2*bw + 2*dx; k++; j++; } } y = y + bh + dy; } } // щелчок на кнопке private void Button_Click(object sender, System.EventArgs e) { // нажатая кнопка Button btn = (Button)sender; // кнопки 1..9 if ( Convert.ToInt32(btn.Tag) > 0) { if ( fd ) { // на индикаторе ноль, т.е. // это первая цифра label1.Text = btn.Text; fd = false; } else label1.Text += btn.Text; return; } // ноль if (Convert.ToInt32(btn.Tag) == 0) { if (fd) label1.Text = btn.Text; if (label1.Text != "0") label1.Text += btn.Text; return; } // запятая if ( Convert.ToInt32(btn.Tag) == -1 ) { if (fd) { label1.Text = "0,"; fd = false; } else if (label1.Text.IndexOf(",") == -1) label1.Text += btn.Text; return; } // "с" - очистить if (Convert.ToInt32(btn.Tag) == -5 ) { ac = 0; // очистить аккумулятор op = 0; label1.Text = "0"; fd = true; // снова ждем первую цифру return; } // кнопки "+","-","=" if (Convert.ToInt32(btn.Tag) < -1) { double n; // число на индикаторе n = Convert.ToDouble(label1.Text); // Нажатие клавиши операции означает что пользователь // ввел операнд. Если в аккумуляторе есть число, то // выполним операцию. Если это не так, запомним // операцию, чтобы выполнить ее при следующем нажатии // клавиши операции. if (ac != 0) { switch (op) { case -3: ac += n; break; case -4: ac -= n; break; case -2: ac = n; break; } label1.Text = ac.ToString("N"); } else { ac = n; }
op = Convert.ToInt32(btn.Tag); // запомнить операцию fd = true; // ждем следующее число } } } } |