Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Помогите советом, пожалуйста... (VB Express 2010) (http://forum.oszone.net/showthread.php?t=310036)

Andrew_VK 07-01-2016 00:54 2591930

Помогите советом, пожалуйста... (VB Express 2010)
 
Понял необходимость умения писать несложные расчетные программы.
Это первая.
Вопрос - хотелось бы получать результат вычисления сразу в обоих TextBox-ах (3 и 4) не дожидаясь перевода фокуса (или перемещения курсора в эти поля).
Например: в ТВ1 пишется некоторое значение, после этого пишется значение в ТВ2. В ТВ3 и 4 выводятся результаты.
В данном случае решается треугольник, и значения могут быть любыми. Так, если значения будут 20 и 100, то в ТВ1 вписывается соответственно 20, а в ТВ2 будет вписываться 100. Но, хотелось бы, чтобы значения ТВ3 и 4 менялись сразу же после занесения 1, потом 0 и опять 0.
Буду благодарен за пример "как надо" для дальнейшего изучения и применения (я же только учусь).
Пример программы ниже (Visual Basic Express 2010):

Public Class Form1
Dim X, Y, radians, result, angle As Double
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
End Sub

Private Sub TextBox1_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBox1.TextChanged
X = Val(TextBox1.Text)
End Sub

Private Sub TextBox2_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBox2.TextChanged
Y = Val(TextBox2.Text)
End Sub

Private Sub TextBox3_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBox3.TextChanged
radians = Math.Atan(Y / X)
angle = radians * (180 / Math.PI)
result = 90 - angle
TextBox3.Text = Math.Round(result, 4)
End Sub

Private Sub TextBox4_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBox4.TextChanged
TextBox4.Text = Math.Round(result * 2, 4)
End Sub
End Class

Iska 07-01-2016 02:41 2591944

Цитата:

Цитата Andrew_VK
хотелось бы получать результат вычисления сразу в обоих TextBox-ах (3 и 4) не дожидаясь перевода фокуса (или перемещения курсора в эти поля). »

Это не лучший выбор. Лучше завести отдельную командную кнопку «Выполнить расчёт».

Того, что Вы выложили — недостаточно. Опишите всю задачу целиком. Покажите весь проект. Как организовано ограничение на ввод некорректных данных (например, вводятся не цифры, а буквы)?

Drongo 07-01-2016 13:26 2592030

Я понял о чём автор говорит. Я опишу алгоритм, хоть сам это делал на С++

В обработчике OnKeyPress тексбокса1, вызываете функцию, пусть она будет называться Calculate(), в самой функции Calculate() делаете расчёты и вывод в ТВ 3 и 4, тогда по нажатию кнопки в ТВ 1 у вас вызовется Calculate() с последующим расчётом и заполнением ТВ 3 и 4.

Цитата:

Цитата Iska
Как организовано ограничение на ввод некорректных данных (например, вводятся не цифры, а буквы »

Ну это просто свойство можно поставить NumberOnly = true


Andrew_VK 07-01-2016 13:39 2592032

Спасибо за ответ, я именно так и сделал и, о чудо - все работает так как хотел. Теперь понимаю, что вопрос был совершенно примитивным. Извините!

Насчет кнопки "Расчет" - не удобно, т.к. бывает нужно просто быстренько подбирать подходящие варианты сторон, для получения нужного угла, а лишняя операция не очень удобна.


Время: 09:45.

Время: 09:45.
© OSzone.net 2001-