Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 06.04.2009
Сообщений: 36
1

Не могу понять почему не работает

09.10.2011, 21:06. Показов 1627. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите исправить код программы, пожалуйста!
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
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 Kalkulyator
{
    public partial class Form1 : Form
    {
        private const int
            bw = 40, bh = 25, //ширина и высота кнопок
            bdx = 5, bdy = 5; //расстояние м/у кнопками
 
        //массив цифровых кнопок 0..9 и запятая
        private Button[] tsifr = new Button[11];
 
        //массив операционных кнопок: +, -, =, с
        private Button[] operkn = new Button[4];
 
        private double akkumul; //аккумулятор
        private string tekoper; //текущая операция
        private Boolean ftsifr; //ftsifr==true - ждем перв. цифру числа, напр. после +;
        //ftsifr==false - ждем ввода след. цифры или нажатия кноп. опер.
 
 
 
        //конструктор формы
        public Form1()
        {
            InitializeComponent();
        }
 
 
        private void Form1_Load(object sender, EventArgs e)
        {
            int x, y; //коорд. размещ.кнопок
 
            //ширина и высота раб. обл. формы
            this.ClientSize = new System.Drawing.Size(4 * bw + 5 * bdx, 5 * bh + 7 * bdy);
 
            //создание цифровых кнопок
            for (int i = 0; i <= 10; i++)
            {
                tsifr[i] = new Button();
 
                //цифровые кнопки 0-9
                if (i < 10)
                {
                    tsifr[i].Name = "Button" + Convert.ToString(i);
                    tsifr[i].Text = i.ToString();
 
                    if (i != 0)
                    {
                        x = ((i - 1) % 3) * bw + (((i - 1) % 3) + 1) * bdx;
                        y = ((int)((9 - i) / 3) + 1) * bh + ((int)((9 - i) / 3) + 2) * bdy;
                        tsifr[i].SetBounds(x, y, bw, bh);
                    }
                    else //кнопка 0
                        tsifr[i].SetBounds(bdx, 4 * bh + 5 * bdy, 2 * bw + bdx, bh);
                }
                //кнопка запятая
                else
                {
                    tsifr[i].Name = "ButtonComma";
                    tsifr[i].Text = ",";
                    tsifr[i].SetBounds(2 * bw + 3 * bdx, 4 * bh + 5 * bdy, bw, bh);
                }
                //назначение проц. обработки события нажатия кнопки
                this.tsifr[i].Click += new System.EventHandler(this.ButtonN_Click);
 
                //добавление сформированной кнопки на форму
                this.Controls.Add(this.tsifr[i]);
            }
            //создание операционных кнопок
            for (int i = 0; i <= 3; i++)
            {
                operkn[i] = new Button();
 
                //кнопка +
                if (i == 0)
                {
                    operkn[i].Name = "BattonPlus";
                    operkn[i].Text = "+";
                }
 
                //кнопка -
                if (i == 1)
                {
                    operkn[i].Name = "ButtonMinus";
                    operkn[i].Text = "-";
                }
 
                //кнопка =
                if (i == 2)
                {
                    operkn[i].Name = "ButtonResult";
                    operkn[i].Text = "=";
                }
 
                //кнопка с
                if (i == 3)
                {
                    operkn[i].Name = "ButtonClear";
                    operkn[i].Text = "C";
                }
                operkn[i].SetBounds(3 * bw + 4 * bdx, (i + 1) * bh + (i + 2) * bdy, bw, bh);
 
                //назнач.проц.обраб.соб.нажатия кнопки
                this.operkn[i].Click += new System.EventHandler(this.ButtonOperkn_Click);
 
                //добавление кнопки на форму
                this.Controls.Add(this.operkn[i]);
            }
 
            //ждем первую цифру
            ftsifr = true;
            tekoper = "ButtonResult";
 
            // параметры цифрового индикатора
            label1.SetBounds(bdx, bdy, 4 * bw + 3 * bdx, bh);
            label1.Text = "0";
 
        }
 
        //нажатие цифр или запятой
        private void ButtonN_Click(object sender, System.EventArgs e)
        {
            //нажатая кнопка
            Button btn_c = (Button)sender;
            if (btn_c.Name != "ButtonComma")
            {
                //цифры
                if (btn_c.Name != "Button0")
                {
                    //кнопки 1..9
                    if (ftsifr)
                    {
                        label1.Text = btn_c.Text;
                        ftsifr = false;
                    }
                    else
                        label1.Text += btn_c.Text;
                }
                else
                {
                    //кнопка 0
                    if (ftsifr) label1.Text = btn_c.Text;
                    if (label1.Text != "0") label1.Text += btn_c.Text;
                }
            }
            else
                //запятая
                if (ftsifr)
                {
                    label1.Text = "0,";
                    ftsifr = false;
                }
                else
                    if (label1.Text.IndexOf(",") == -1) label1.Text += btn_c.Text;
        }
        //нажатие операц. кнопок
        private void ButtonOperkn_Click(object sender, System.EventArgs e)
        {
            //нажатая кнопка
            Button btn_c = (Button)sender;
 
            //число на индикаторе
            double ind_n;
            //кнопки +,-,=
 
            if (btn_c.Name != "battonClear")
            {
                ind_n = Convert.ToDouble(label1.Text);
                //выполняем предыдущую операцию
                if (ftsifr == false)
                {
                    if (tekoper.Equals("ButtonPlus")) akkumul += ind_n;
                    if (tekoper.Equals("ButtonMinus")) akkumul -= ind_n;
                    if (tekoper.Equals("ButtonResult")) akkumul = ind_n;
                }
                if (btn_c.Name == "ButtonPlus") tekoper = "ButtonMinus";
                if (btn_c.Name == "ButtonRsult") tekoper = "ButtonResult";
                label1.Text = akkumul.ToString();
            }
            else
            {
                // кнопка С (очистить)
                akkumul = 0;
                label1.Text = "0";
            }
            ftsifr = true;
        }
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.10.2011, 21:06
Ответы с готовыми решениями:

Подскажите по парсингу, не могу понять почему не работает xpath
Есть программка, хочу парсить страницу, использую HtmlAgilityPack, беру элемент нужный из кода по...

Не могу понять, почему программа работает неправильно( Знаю, что где-то ошибки, но не могу найти
{Ввести последовательность натуральных чисел Aj j=1...n (n&lt;=1000). Упорядочить последовательность...

Не работает изменение, не могу понять почему, Update не работает, ошибку выдает
Помогите, изменение с помощью button string u =...

Не могу понять почему не работает (или правильно не работает)
#include &lt;iostream.h&gt; #include &lt;conio.h&gt; #define N 5 #define M 3 void main() { int a; ...

11
Level 2
401 / 275 / 48
Регистрация: 22.11.2010
Сообщений: 785
Записей в блоге: 1
09.10.2011, 21:23 2
А написать что программа должна делать не надо? Написать где ошибка и есть ли вообще ошибка?
0
0 / 0 / 0
Регистрация: 06.04.2009
Сообщений: 36
09.10.2011, 22:32  [ТС] 3
Вообщем в калькуляторе не работают функциональные кнопки, а цифры вводятся.

Добавлено через 1 час 6 минут
Внес изменения в программу, но не работает кнопка очистить, помогите исправить
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
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 Kalkulyator
{
    public partial class Form1 : Form
    {
        private const int
            bw = 40, bh = 25, // ширина и высота кнопок
            bdx = 5, bdy = 5; // расстояние м/у кнопками
 
        // массив цифровых кнопок 0..9 и запятая
        private Button[] d = new Button[11];
 
        // массив операционных кнопок: +, -, =, с
        private Button[] op = new Button[4];
 
        private double ac; // аккумулятор
        private string co; // текущая операция
        private Boolean fd; // fd==true - ждем первую цифру числа, например после нажатия +;
                            // fd==false - ждем ввода следующей цифры или нажатия кнопки операции
 
        // конструктор формы
        public Form1()
        {
           InitializeComponent();
            
           int x, y; // координаты размещения кнопок
 
           // ширина и высота рабочей области формы
           this.ClientSize = new System.Drawing.Size(4 * bw + 5 * bdx, 5 * bh + 7 * bdy);
 
            // параметры цифрового индикатора
            textBox1.SetBounds(bdx, bdy, 4 * bw + 3 * bdx, bh);
            textBox1.Text = "0";
 
            // создание цифровых кнопок
            for (int i = 0; i <= 10; i++)
            {
                d[i] = new Button();
 
                // цифровые кнопки 0-9
                if (i < 10)
                {
                    d[i].Name = "Button" + Convert.ToString(i);
                    d[i].Text = i.ToString();
 
                    if (i != 0)
                    {
                        x = ((i - 1) % 3) * bw + (((i - 1) % 3) + 1) * bdx;
                        y = ((int)((9 - i) / 3) + 1) * bh + ((int)((9 - i) / 3) + 2) * bdy;
                        d[i].SetBounds(x, y, bw, bh);
                    }
                    else // кнопка 0
                        d[i].SetBounds(bdx, 4 * bh + 5 * bdy, 2 * bw + bdx, bh);
                }
 
                // кнопка запятая
                else
                {
                    d[i].Name = "ButtonComma";
                    d[i].Text = ",";
                    d[i].SetBounds(2 * bw + 3 * bdx, 4 * bh + 5 * bdy, bw, bh);
                }
 
                // назначение процедуры обработки события нажатия кнопки
                this.d[i].Click += new System.EventHandler(this.ButtonN_Click);
 
                // добавление сформированной кнопки на форму
                this.Controls.Add(this.d[i]);
            }
 
            // создание операционных кнопок
            for (int i = 0; i <= 3; i++)
            {
                op[i] = new Button();
 
                // кнопка +
                if (i == 0)
                {
                    op[i].Name = "ButtonPlus";
                    op[i].Text = "+";
                }
 
                // кнопка -
                if (i == 1)
                {
                    op[i].Name = "ButtonMinus";
                    op[i].Text = "-";
                }
 
                // кнопка =
                if (i == 2)
                {
                    op[i].Name = "ButtonResult";
                    op[i].Text = "=";
                }
 
                // кнопка с
                if (i == 3)
                {
                    op[i].Name = "ButtonClear";
                    op[i].Text = "c";
                }
 
                op[i].SetBounds(3 * bw + 4 * bdx, (i + 1) * bh + (i + 2) * bdy, bw, bh);
 
                // назначение процедуры обработки события нажатия кнопки
                this.op[i].Click += new System.EventHandler(this.Buttonop_Click);
 
                // добавление кнопки на форму
                this.Controls.Add(this.op[i]);
            }
 
            // ждем первую цифру
            fd = true;
            co = "ButtonResult";                       
        }
 
        //нажатие цифр или запятой
        private void ButtonN_Click(object sender, System.EventArgs e)
        {
            // нажатая кнопка
            Button btn_c = (Button)sender;
            if (btn_c.Name != "ButtonComma")
            {
                // цифры
                if (btn_c.Name != "Button0")
                {
                // кнопки 1..9
                    if (fd)
                    {
                        textBox1.Text = btn_c.Text;
                        fd = false;
                    }
                    else
                        textBox1.Text += btn_c.Text;
                }
                else
                {
                    // кнопка 0
                    if (fd) textBox1.Text = btn_c.Text;
                    if (textBox1.Text != "0") textBox1.Text += btn_c.Text;
                }
            }
            else
                // запятая
                if (fd)
                {
                    textBox1.Text = "0,";
                    fd = false;
                }
                else
                    if (textBox1.Text.IndexOf(",") == -1) textBox1.Text += btn_c.Text;
        }
        // нажатие операционных кнопок
        private void Buttonop_Click(object sender, System.EventArgs e)
        {
            // нажатая кнопка
            Button btn_c = (Button)sender;
 
            // число на индикаторе
            double ind_n;
            
            if (btn_c.Name != "battonClear")
            {
                // кнопки +,-,=
                ind_n = Convert.ToDouble(textBox1.Text);
                // выполняем предыдущую операцию
                if (fd == false)
                {
                    if (co.Equals("ButtonPlus")) ac += ind_n;
                    if (co.Equals("ButtonMinus")) ac -= ind_n;
                    if (co.Equals("ButtonResult")) ac = ind_n;
                }
                if (btn_c.Name == "ButtonPlus") co = "ButtonPlus";
                if (btn_c.Name == "ButtonMinus") co = "ButtonMinus";
                if (btn_c.Name == "ButtonResult") co = "ButtonResult";
                textBox1.Text = ac.ToString();
            }
            else
            {
                // кнопка с (очистить)
                ac = 0;
                textBox1.Text = "0";
                co = "ButtonResult";
            }
            fd = true;
        }
    }
}
0
Эксперт .NET
17685 / 12871 / 3365
Регистрация: 17.09.2011
Сообщений: 21,136
09.10.2011, 22:46 4
Прикрепите уж весь проект - проще будет.
0
0 / 0 / 0
Регистрация: 06.04.2009
Сообщений: 36
09.10.2011, 22:52  [ТС] 5
Пишите, пожалуйста, по делу, не надо умничать, писать не нужные вещи. Человек серьезно просто не шарит и спрашивает у знающих людей.
0
Level 2
401 / 275 / 48
Регистрация: 22.11.2010
Сообщений: 785
Записей в блоге: 1
09.10.2011, 23:11 6
Цитата Сообщение от Амангельды Посмотреть сообщение
Пишите, пожалуйста, по делу, не надо умничать, писать не нужные вещи. Человек серьезно просто не шарит и спрашивает у знающих людей.
Люди по делу говорят, прикрепите проект, так проще, может кто возьмётся и поправит проект.
0
Злой няш
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
09.10.2011, 23:13 7
Цитата Сообщение от Амангельды Посмотреть сообщение
Пишите, пожалуйста, по делу, не надо умничать, писать не нужные вещи. Человек серьезно просто не шарит и спрашивает у знающих людей.

Не по теме:

Или меня глючить, или у ТС раздвоение личности.


Помочь ТС очень трудно по ряду причин:
1. Даже если кто-то скопирует этот код в новый проект - не ясно какие компоненты размещены на форме.
2. Слишком много кода, где название переменных сокращены непроизносимыми, трудно запоминаемыми, не отражающими суть словами. Так же в коде фигурируют непонятные формулы и константы. (Все константы, отличающиеся от 0 и 1, считаются искусственными и должны описывать свою природу)
3. Что значит "не работает кнопка очистить"? Стоит описать нормально то, что она вообще должна делать.
4. Код слишком нагроможден - есть очень высокая вероятность в наличии еще ошибок - стоит по пунктам описать в общих чертах что вообще необходимо реализовать.
Да и вообще, C# - это ООП, а не структурное программирование. Такой код очень трудно отлаживать.
Так что или прикрепляйте весь проект, или не надейтесь на помощь.
0
0 / 0 / 0
Регистрация: 06.04.2009
Сообщений: 36
09.10.2011, 23:26  [ТС] 8
Файл прикреплен
Вложения
Тип файла: rar Kalkulyator.rar (42.2 Кб, 15 просмотров)
0
Эксперт .NET
17685 / 12871 / 3365
Регистрация: 17.09.2011
Сообщений: 21,136
09.10.2011, 23:53 9
Цитата Сообщение от Амангельды Посмотреть сообщение
Пишите, пожалуйста, по делу, не надо умничать, писать не нужные вещи.
Вы зря сердитесь - никто умничать и не думал. Действительно проще найти проблему, просто запустив проект у себя в дебаггере и быстренько отследив в чем дело, чем задавать "наводящие" вопросы, тратя уйму времени на ожидание ответа.
В любом случае, задеть и в мыслях не было, извиняйте если что.

Проблема с кнопкой Clear находится на строчке 171 файла Form1.cs - у вас там сравнение идет таким образом:
C#
1
if (btn_c.Name != "battonClear")
А кнопка Clear при этом называется "ButtonClear". В результате условие всегда истинно и блок Else, где обрабатывается очистка, никогда не запускается.
Замените эту строчку на
C#
1
if (btn_c.Name != "ButtonClear")
Банальная опечатка.
0
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
10.10.2011, 01:44 10
Я бы на твоём месте не сравнивал литералы, вот тебе и пример, на котором ты убедился, что так писать не стоит. Вообще нигде не используй один литерал дважды, что бы там ни говорили, это точно убережёт вот от таких ошибок, а это всего лишь маленький калькулятор. Что было бы в большой программе, да ты бы заколебался при любом исправлении в коде натыкаться на ошибки. То есть исправление одного литерала порождало бы массу ошибок.

Я не ставил целью написать по новой, я просто убрал литералы (все названия кнопок и прочие строковые значения) и назвал переменные почитабельнее. Что скрывается под символами fd я так и не догадался.
Подредактированный код калькулятора
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
using System;
using System.Globalization;
using System.Windows.Forms;
 
namespace Kalkulyator
{
    public partial class Form1 : Form
    {
        private const int
            WidthButton = 40, HeightButton = 25, // ширина и высота кнопок
            dxButton = 5, dyButton = 5; // расстояние м/у кнопками
 
        // массив цифровых кнопок 0..9 и запятая
        private Button[] digitButtons = new Button[11];
 
        // массив операционных кнопок: +, -, =, с
        private Button[] operButtons = new Button[4];
 
        private double accumulator; // аккумулятор
        private MathOperation currentOperation; // текущая операция
        private Boolean fd; // fd==true - ждем первую цифру числа, например после нажатия +;
        // fd==false - ждем ввода следующей цифры или нажатия кнопки операции
        readonly string decimalSeparator;
        // конструктор формы
        public Form1()
        {
            decimalSeparator =  NumberFormatInfo.CurrentInfo.NumberDecimalSeparator;
            InitializeComponent();
 
            int x, y; // координаты размещения кнопок
 
            // ширина и высота рабочей области формы
            this.ClientSize = new System.Drawing.Size(4 * WidthButton + 5 * dxButton, 5 * HeightButton + 7 * dyButton);
 
            // параметры цифрового индикатора
            textBox1.SetBounds(dxButton, dyButton, 4 * WidthButton + 3 * dxButton, HeightButton);
            textBox1.Text = ((byte)CalculatorSymbol.Zero).ToString();
 
            // создание цифровых кнопок
            for (int i = 0; i <= 10; i++)
            {
                digitButtons[i] = new Button();
 
                // цифровые кнопки 0-9
                if (i < 10)
                {
                    digitButtons[i].Tag = Enum.GetName(typeof(CalculatorSymbol), i);
                    digitButtons[i].Text = i.ToString();
 
                    if (i != 0)
                    {
                        x = ((i - 1) % 3) * WidthButton + (((i - 1) % 3) + 1) * dxButton;
                        y = ((int)((9 - i) / 3) + 1) * HeightButton + ((int)((9 - i) / 3) + 2) * dyButton;
                        digitButtons[i].SetBounds(x, y, WidthButton, HeightButton);
                    }
                    else // кнопка 0
                        digitButtons[i].SetBounds(dxButton, 4 * HeightButton + 5 * dyButton, 2 * WidthButton + dxButton, HeightButton);
                }
 
                // кнопка запятая
                else
                {
                    digitButtons[i].Tag = Enum.GetName(typeof(CalculatorSymbol), (byte)CalculatorSymbol.Comma);
                    digitButtons[i].Text = decimalSeparator;
                    digitButtons[i].SetBounds(2 * WidthButton + 3 * dxButton, 4 * HeightButton + 5 * dyButton, WidthButton, HeightButton);
                }
 
                // назначение процедуры обработки события нажатия кнопки
                this.digitButtons[i].Click += new System.EventHandler(this.NumberButton_Click);
 
                // добавление сформированной кнопки на форму
                this.Controls.Add(this.digitButtons[i]);
            }
 
            // создание операционных кнопок
            for (int i = 0; i <= 3; i++)
            {
                operButtons[i] = new Button();
 
                // кнопка +
                if (i == 0)
                {
                    operButtons[i].Tag = Enum.GetName(typeof(MathOperation), (byte)MathOperation.Plus);
                    operButtons[i].Text = "+";
                }
                // кнопка -
                else if (i == 1)
                {
                    operButtons[i].Tag = Enum.GetName(typeof(MathOperation), (byte)MathOperation.Minus);
                    operButtons[i].Text = "-";
                }
                // кнопка =
                else if (i == 2)
                {
                    operButtons[i].Tag = Enum.GetName(typeof(MathOperation), (byte)MathOperation.Result);
                    operButtons[i].Text = "=";
                }
                // кнопка с
                else if (i == 3)
                {
                    operButtons[i].Tag = Enum.GetName(typeof(MathOperation), (byte)MathOperation.Clear);
                    operButtons[i].Text = "c";
                }
 
                operButtons[i].SetBounds(3 * WidthButton + 4 * dxButton, (i + 1) * HeightButton + (i + 2) * dyButton, WidthButton, HeightButton);
 
                // назначение процедуры обработки события нажатия кнопки
                operButtons[i].Click += new System.EventHandler(OperationButton_Click);
 
                // добавление кнопки на форму
                Controls.Add(this.operButtons[i]);
            }
 
            // ждем первую цифру
            fd = true;
            currentOperation = MathOperation.Result;
        }
 
        //нажатие цифр или запятой
        private void NumberButton_Click(object sender, System.EventArgs e)
        {
            // нажатая кнопка
            Button pressedButton = (Button)sender;
            CalculatorSymbol calcSymbol = (CalculatorSymbol)Enum.Parse(typeof(CalculatorSymbol), (string)pressedButton.Tag);
 
            if (calcSymbol != CalculatorSymbol.Comma)
            {
                // цифры
                if (calcSymbol != CalculatorSymbol.Zero)
                {
                    // кнопки 1..9
                    if (fd)
                    {
                        textBox1.Text = pressedButton.Text;
                        fd = false;
                    }
                    else
                        textBox1.Text += pressedButton.Text;
                }
                else
                {
                    // кнопка 0
                    if (fd) textBox1.Text = pressedButton.Text;
                    if (textBox1.Text != ((byte)CalculatorSymbol.Zero).ToString()) textBox1.Text += pressedButton.Text;
                }
            }
            else
                // запятая
                if (fd)
                {
                    textBox1.Text = ((byte)CalculatorSymbol.Zero).ToString() + decimalSeparator;
                    fd = false;
                }
                else
                    if (textBox1.Text.IndexOf(decimalSeparator) == -1) textBox1.Text += pressedButton.Text;
        }
        // нажатие операционных кнопок
        private void OperationButton_Click(object sender, System.EventArgs e)
        {
            // нажатая кнопка
            Button pressedButton = (Button)sender;
            MathOperation mathOperation = (MathOperation)Enum.Parse(typeof(MathOperation), (string)pressedButton.Tag);
 
            // число на индикаторе
            double indicatorNumber;
 
            if (!mathOperation.Equals(MathOperation.Clear))
            {
                // кнопки +,-,=
                indicatorNumber = Convert.ToDouble(textBox1.Text);
                // выполняем предыдущую операцию
                if (fd == false)
                {
                    if (currentOperation.Equals(MathOperation.Plus)) accumulator += indicatorNumber;
                    if (currentOperation.Equals(MathOperation.Minus)) accumulator -= indicatorNumber;
                    if (currentOperation.Equals(MathOperation.Result)) accumulator = indicatorNumber;
                }
                if (mathOperation.Equals(MathOperation.Plus)) currentOperation = MathOperation.Plus;
                if (mathOperation.Equals(MathOperation.Minus)) currentOperation = MathOperation.Minus;
                if (mathOperation.Equals(MathOperation.Result)) currentOperation = MathOperation.Result;
                textBox1.Text = accumulator.ToString();
            }
            else
            {
                // кнопка с (очистить)
                accumulator = 0;
                textBox1.Text = "0";
                currentOperation = MathOperation.Result;
            }
            fd = true;
        }
    }
 
    /// <summary>Отражает математические операции</summary>
    enum MathOperation : byte
    {
        /// <summary>Плюс</summary>
        Plus,
        /// <summary>Минус</summary>
        Minus,
        /// <summary>Результат</summary>
        Result,
        /// <summary>Очистить</summary>
        Clear
    }
 
    /// <summary>Отражает цифры от 0 до 9 и запятую</summary>
    enum CalculatorSymbol : byte
    {
        /// <summary>Ноль</summary>
        Zero = 0, //Для гарантии, что в любом случае будет ноль, даже после изменения перечисления
        /// <summary>Один</summary>
        One = 1,
        /// <summary>Два</summary>
        Two = 2,
        /// <summary>Три</summary>
        Three = 3,
        /// <summary>Четыре</summary>
        Four = 4,
        /// <summary>Пять</summary>
        Five = 5,
        /// <summary>Шесть</summary>
        Six = 6,
        /// <summary>Семь</summary>
        Seven = 7,
        /// <summary>Восемь</summary>
        Eight = 8,
        /// <summary>Девять</summary>
        Nine = 9,
        /// <summary>Запятая</summary>
        Comma
    }
}
Вложения
Тип файла: zip Kalkulyator.zip (26.5 Кб, 14 просмотров)
1
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
10.10.2011, 01:46 11
Цитата Сообщение от Casper-SC Посмотреть сообщение
Что скрывается под символами fd я так и не догадался
А-а-а, походу First Digit
0
bellliy
10.10.2011, 02:24     Не могу понять почему не работает
  #12

Не по теме:

Че та походу какой то группе раздали задания с калькуляторами всевозможными! Многовато тем всплыло о калькуляторе

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.10.2011, 02:24

Не могу понять почему не работает
Суть програмы в тому чтобы украинский текст транслитерировать английскими буквами. Пользователь...

Не могу понять почему не работает
есть таблица &lt;table&gt; &lt;tr class=&quot;th&quot;&gt; &lt;td&gt;&amp;nbsp;&lt;/td&gt; &lt;td&gt;Блюдо&lt;/td&gt; ...

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

Не могу понять почему не работает
#include &quot;stdio.h&quot; #include &quot;math.h&quot; #include &quot;conio.h&quot; #define E 1e-6 int main() { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru