В недавней статье мы писали консольную программу для сложения двух чисел на языке C#.
Теперь давайте попробуем написать такую же программу, но уже не в консоли, а используя формы Windows Forms.
Итак, для начала мы добавляем в нашу форму три TextBox’a из панели элементов. В первые два мы запишем наши числа, а в третей выведется результат. При помощи элемента Label подпишем их.
Переходим к коду, и в теле кода public partial class Form1 : Form объявляем следующие переменные:
1 2 3 4 |
string s; double a; double b; double c; |
В s мы будем считывать строки из первых двух TextBox’ов.
а — конвертированное в double первое число.
b — конвертированное в double второе число.
c — сумма этих чисел.
Далее в форме дважды щелкаем на TextBox1, открывается участок кода, в который мы пишем:
1 2 3 4 5 |
private void textBox1_TextChanged(object sender, EventArgs e) { s = textBox1.Text; a = Convert.ToDouble(s); } |
Как было сказано выше, мы считываем текст и конвертируем его в тип с плавающей точкой double.
Затем в форме по аналогии щёлкаем на TextBox2 и пишем почти тоже самое, но с другой переменной double:
1 2 3 4 5 |
private void textBox2_TextChanged(object sender, EventArgs e) { s = textBox2.Text; b = Convert.ToDouble(s); } |
Мы не добавляем помимо s другую строковую переменную, как это было в статье с консолью, так как считываемые строки на этот раз находятся в разных телах кода, поэтому значение s из первого TextBox’a не сохраняется во втором TextBox’e. Так мы экономим память.
Теперь, допустим, что мы хотим, чтобы сумма в третьем TextBox’e появлялась при щелчке на область этого TextBox’a. Тогда мы щёлкаем один раз на TextBox3, идём в События (значок в виде молнии) и ищем вкладку MouseClick:
Дважды нажимаем на неё, нас переносит на участок кода, отвечающий за щелчок мыши на участке третьего TextBox’a. И там мы пишем:
1 2 3 4 5 |
private void textBox3_MouseClick(object sender, MouseEventArgs e) { c = a + b; textBox3.Text = Convert.ToString(c); } |
Собственно, складываем полученные числа и переводим с в строковый формат.
Вот и всё, программа готова:
Исходник на языке C#:
Скачать исходник
Поделиться в соц. сетях:
День добрый!
С кодом все понятно.
Хочу сделать чтобы в третьем textBox’e результат писался не после клика, а как только вводишь значения в любой из двух предыдущих. Уже 3 дня бьюсь над этой проблемой, все никак.
Можете помочь?
Заранее благодарен.
Здравствуйте, Alexandr.
Для этого Вам необходимо удалить событие textBox3_MouseClick, а код, который выполнялся в нём скопировать в события textBox1_TextChanged и textBox2_TextChanged.
Код будет таким:
private void textBox1_TextChanged(object sender, EventArgs e)
{
s = textBox1.Text;
a = Convert.ToDouble(s);
c = a + b;
textBox3.Text = Convert.ToString(c);
}
private void textBox2_TextChanged(object sender, EventArgs e)
{
s = textBox2.Text;
b = Convert.ToDouble(s);
c = a + b;
textBox3.Text = Convert.ToString(c);
}
К сожалению код не рабочий, выдает ошибку.
Скрин во вложении.
https://i.gyazo.com/17f05def7297d0a49e9b20743467b8ee.png
Можете попробовать присвоить при объявлении a и b значение 0. Либо попробуйте вот эту программу: https://yadi.sk/d/kPkl_5PKoTVad
Должно всё заработать.
Спасибо большое!
Последний код рабочий!
И предыдущий заработал, видимо был какойто глюк программы.
Когда пытаюсь ввести не целое число например(0,15) при нажатии на «.» программа вылетает. и выводит сообщение: Выходная строка имеет неверный формат. Как это исправить?
В дробном числе попробуйте использовать или точку, либо запятую. Что-то из них должно работать.