Maciej Los
Ну, по-моему, ты делаешь это неправильно.
Что касается тела функций...
С точки зрения практики программирования, функция должна быть как можно более универсальной. Таким образом, он может принимать ноль, один или несколько параметров, но он не должен ссылаться на элементы управления в форме!
Public Function Calculator(ByVal strMod As String)
Dim Num1 As Integer = TextBox1.Text
Dim Num2 As Integer = TextBox2.Text
Dim Num3 As Single = TextBox3.Text
Select Case strMod
Case Calculator("Add")
Num3 = Num1 + Num2
Case Calculator("Sub")
Num3 = Num1 - Num2
End Select
Return Num3
End Function
Ваша функция должна использовать 3 параметра:
- число, в котором хранится фактический результат (по умолчанию ноль)
- число, которое используется для дальнейшего расчета
- знак [
+
], [-
], [*
] или [/
] - он же математический оператор
Public Function Calculate(ByVal totalValue As Single, ByVal currentValue As Single, ByVal mathOperator As String)
Dim retVal as Single = 0
'here your logic
Select Case mathOperator
Case "+"
retVal = totalValue + currentValue
Case "-"
retVal = totalValue - currentValue
Case "*"
retVal = totalValue * currentValue
Case "/"
retVal = totalValue / currentValue
End Select
Return retVal
End Function
Использование:
Допустим, у вас есть одна кнопка для операции сложения [+], одна для операции вычитания [ - ] и т. д., Но все кнопки относятся к одному и тому же
Click
событие (см.:
Как подключить несколько событий к одному обработчику событий в Windows Forms[
^])
Private Sub ButtonAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonAdd.Click, ButtonSub.Click, ...
Dim tot As Single = Convert.ToSingle(Me.TextBoxResult.Text)
Dim cur As Single = Convert.ToSingle(Me.TextBoxValue.Text)
Dim moper As String = TryCast(sender, Button).Text '
TextBoxResult.Text = Calculate(tot, cur, moper)
End Sub
Как вы можете видеть, я использовал
Преобразовать.Жеребьевка()[
^] метод преобразования строки в сингл.
Вот пример MSDN:
Окна VB.Net образец калькулятора в VB.NET для Visual Studio 2008[
^]
Но, наконец, вам нужен вычислитель/анализатор математических выражений. Видеть:
Простой Математический Парсер - Главная Страница[
^]
Быстрый Легкий Оценщик Выражений - Главная[
^]
ILCalc: Вычислитель Арифметических Выражений - Главная Страница[
^]
NCalc - вычислитель математических выражений для .NET - Home[
^]
Вычислитель выражений пересмотреть функции eval (на 100% удалось .Чистая)[
^]
Механизм вычислений для .NET[
^]
Ralf Meier
Очень хорошее решение, потому что оно объясняет, как ОП должен работать в будущем. +5 от меня !!!
Но... у вас есть небольшая ошибка в вашем коде (конечно, vb не терпит с ней неудачи - но для обучения это лучше)
Вы написали: :
TextBoxResult.Текст = вычислить(тот, шавка, угрюмым)
метод calculate выдает один результат as, а текстовое поле ожидает строку - так что код должен быть лучше :
TextBoxResult.Текст = вычислить(tot, cur, moper).toString
Maciej Los
Спасибо, Ральф.
Ну, эта строчка TextBoxResult.Text = Calculate(tot, cur, moper)
должен работать даже без него ToString()
метод, но..... - Да, ты прав. Хорошая мысль!