Приложение "калькулятор"
Создайте новый проект (Windows Application) и назовите его Calculator. Устанавливаем следующие свойства формы:
Name | Calc |
FormBorderStyle | Fixed3D |
Icon | Путь E:\Program Files\Microsoft Visual Studio .NET2003\Common7\Graphics\icons\Computer\KEYS01.ICO |
MaximizeBox | False |
Size | 280;280 |
Text | Калькулятор 1.0 |
Запускаем приложение. Возникает ошибка — "D:\Code\Glava1\Calculator\Form1.cs(75): The type or namespace name 'Form1' could not be found (are you missing a using directive or an assembly reference?)"
Мы изменили свойство Name, а в коде метода Main, сгенерированном Мастером, осталось старое имя формы. Исправляем на новое:
[STAThread] static void Main() { Application.Run(new Calc()); }
Теперь все работает. Вернемся в режим дизайна и расположим на форме кнопки калькулятора и TextBox, который будет играть роль дисплея (рис. 1.43):
Рис. 1.43. Расположение элементов управления в режиме дизайна
Для кнопок устанавливаем следующие свойства:
button1 | btn1 | 1 |
button2 | btn2 | 2 |
button3 | btn3 | 3 |
button4 | btn4 | 4 |
button5 | btn5 | 5 |
button6 | btn6 | 6 |
button7 | btn7 | 7 |
button8 | btn8 | 8 |
button9 | btn9 | 9 |
button10 | btn10 | 0 |
button11 | btnChangesign | +/– |
button12 | btnpoint | , |
button13 | btn_plus | + |
button14 | btn_minus | – |
button15 | btn_umnojenie | * |
button16 | btn_delenie | / |
button17 | btn_sbros | C |
button18 | btn_ravno | = |
Установим свойство Size одной кнопки 40;40, а затем, выделив все остальные кнопки, сделаем их одинакового размера — пункт меню Format/Make Same Size/Both. Затем высоту кнопок btn_sbros и btn_ravno сделаем сдвоенной, как показано на рис. рис. 1.43.
Для текстового поля устанавливаем следующие свойства:
Name | txtOutput |
Font/Size | 12 |
Size | 250; 26 |
Location | 10;24 |
TextAlign | Right |
Дизайн нашего приложения готов. Теперь можно приступать к коду. Состоять он будет из двух классов — public class Calc : System.Windows.Forms.Form —основного, в котором будет реализовываться вся обработка нажатия клавиш, и class mehanizmcalkulyatora, в котором будет находиться вся логика его работы (рис. 1.44):
Рис. 1.44. Для просмотра структуры кода удобно сворачивать классы, щелкая на знаке (+)
Далее привожу листинг класса mehanizmcalkulyatora с комментариями:
Листинг 1.8.
(html, txt)
Механизм калькулятора готов. Для создания обработчиков кнопок в режиме дизайна дважды щелкаем по каждой кнопке, для быстрого возврата к режиму дизайна используем сочетания клавиш Shift+F7. Теперь в классе public class Calc : System.Windows.Forms.Form добавляем код для работы интерфейса приложения1):
Листинг 1.9.
(html, txt)
Приложение готово (рис. 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, используются также для анализа листинга.
on_load_lecture()
« |
1
|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
9
|
10
|
вопросы | »
учебники
|
для печати и PDA
Курсы | Учебные программы | Учебники | Новости | Форум | Помощь Телефон: +7 (495) 253-9312, 253-9313, факс: +7 (495) 253-9310, email: info@intuit.ru © 2003-2007, INTUIT.ru::Интернет-Университет Информационных Технологий - дистанционное образование |
public static void DeystvieCalculatora (Deystvie peremenDeystviya) { try { if (resultatOutput != "" && !dobavlenierazryada) { pervoeChislo = System.Convert.ToDouble (resultatOutput); tekusheeDeystvieCalculatora = peremenDeystviya; resultatOutput = ""; ChislosTochkoy = false; } }
catch (Exception ex) { MessageBox.Show(ex.ToString()); } finally {
} }
/// <summary> /// При нажатии кнопки +/– число на экране — tekusheeChislo умножается на –1, /// а затем результат снова присваивается переменной resultatOutput /// </summary>
public static string ZnakChisla () { double tekusheeChislo;
if (resultatOutput != "") { tekusheeChislo = System.Convert.ToDouble (resultatOutput); resultatOutput = System.Convert.ToString(tekusheeChislo * peremennayaMinus); }
return (resultatOutput); }
/// <summary> /// При нажатии кнопки ( , ) переменная resultatOutput приобретает дробную часть /// </summary>
public static string ZnakTochki () { if (!ChislosTochkoy && !dobavlenierazryada) { if (resultatOutput != "") resultatOutput = resultatOutput + ","; else resultatOutput = "0,";
ChislosTochkoy = true; }
return (resultatOutput); }
/// <summary> /// При нажатии кнопки ZnakRavno обрабатываются значения /// переменнных pervoeChislo и vtoroeChislo, результат присваивается переменной ///resultatVichisleniy, /// которая затем преобразуется в resultatOutput /// </summary>
public static string ZnakRavno () { bool proverkaOshibok = false;
if (resultatOutput != "") { vtoroeChislo = System.Convert.ToDouble (resultatOutput); dobavlenierazryada = true;
switch (tekusheeDeystvieCalculatora) { case Deystvie.NeopredelDeystvie: proverkaOshibok = false; break;
case Deystvie.Slojenie: resultatVichisleniy = pervoeChislo + vtoroeChislo; proverkaOshibok = true; break;
case Deystvie.Vichitanie: resultatVichisleniy = pervoeChislo – vtoroeChislo; proverkaOshibok = true; break;
case Deystvie.Umnojenie: resultatVichisleniy = pervoeChislo * vtoroeChislo; proverkaOshibok = true; break;
case Deystvie.Delenie: resultatVichisleniy = pervoeChislo / vtoroeChislo; proverkaOshibok = true; break;
default: proverkaOshibok = false; break; }
if (proverkaOshibok) resultatOutput = System.Convert.ToString (resultatVichisleniy); }
return (resultatOutput); }
/// <summary> /// При нажатии кнопки С (сброс) значения переменных обнуляются /// </summary>
public static void Sbros () { resultatVichisleniy = 0; pervoeChislo = 0; vtoroeChislo = 0; resultatOutput = ""; tekusheeDeystvieCalculatora = Deystvie.NeopredelDeystvie; ChislosTochkoy = false; dobavlenierazryada = false; } }
Листинг 1.8.
Механизм калькулятора готов. Для создания обработчиков кнопок в режиме дизайна дважды щелкаем по каждой кнопке, для быстрого возврата к режиму дизайна используем сочетания клавиш Shift+F7. Теперь в классе public class Calc : System.Windows.Forms.Form добавляем код для работы интерфейса приложения3):
public class Calc : System.Windows.Forms.Form { private System.Windows.Forms.TextBox txtOutput; private System.Windows.Forms.Button btn_sbros; private System.Windows.Forms.Button btnChangesign; private System.Windows.Forms.Button btnpoint; private System.Windows.Forms.Button btn_ravno; private System.Windows.Forms.Button btn_delenie; private System.Windows.Forms.Button btn_umnojenie; private System.Windows.Forms.Button btn_plus; private System.Windows.Forms.Button btn_minus; private System.Windows.Forms.Button btn0; private System.Windows.Forms.Button btn9; private System.Windows.Forms.Button btn8; private System.Windows.Forms.Button btn7; private System.Windows.Forms.Button btn6; private System.Windows.Forms.Button btn5; private System.Windows.Forms.Button btn4; private System.Windows.Forms.Button btn3; private System.Windows.Forms.Button btn2; private System.Windows.Forms.Button btn1; private System.ComponentModel.Container components = null; /// <summary> /// Объявляем и инициализируем переменные, которые будут /// возникать на экране при нажатии соответствующих кнопок /// </summary> private const string odin = "1"; private const string dva = "2"; private const string tri = "3"; private const string chetire = "4"; private 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> /// Обработчики для кнопок обращаются к методу chislonaEkrane класса ///mehanizmcalkulyatora /// и передают ему одну из постоянных (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, используются также для анализа листинга.