Member 12605293 Ответов: 2

С помощью Выбрать программу для вычисления сложение вычитание в VB.NET


Всем Привет,
Я новичок в Vb,пожалуйста, объясните мне, как получить результат сложения и вычитания с помощью case in vb.net-да.
заранее спасибо

Что я уже пробовал:

Public Class Form1

    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

    Public Sub Output_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Dim result As Integer = Calculator("Sub")
        MessageBox.Show(Convert.ToString(result), "Result")
    End Sub

    Public Sub Clear_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Me.Close()
    End Sub
End Class

[no name]

Что именно, по-вашему, должен делать "Case Calculator("Add")"?

2 Ответов

Рейтинг:
9

Wendelius

Есть несколько вещей, которые вы пропустили
- Функция должна иметь возвращаемый тип
- Вместо проверки параметра вы вызываете функцию калькулятора рекурсивно в структуре case

Попробуйте сделать что-то вроде следующего

Public Function Calculator(ByVal strMod As String) As Single
    Dim Num1 As Integer = TextBox1.Text
    Dim Num2 As Integer = TextBox2.Text
    Dim Num3 As Single = TextBox3.Text

    Select Case strMod
        Case "Add"
            Num3 = Num1 + Num2
        Case "Sub"
            Num3 = Num1 - Num2
    End Select
    Return Num3
End Function

Также обратите внимание:
- не знаю, почему вы присваиваете значение num3 из текстового поля3. Должны ли вы сделать это наоборот, если Textbox3 предназначен для результата
- Вместо передачи строки для операции я бы предложил использовать перечисление. Видеть Оператор Перечисления (Visual Basic)[^]
- и, вероятно, было бы более элегантно, если бы вы передали num1 и num2 в качестве параметров функции. Таким образом, функция не будет зависеть от объектов пользовательского интерфейса и может использоваться для различных типов объектов и ситуаций.

[ДОБАВЛЕН]
Для присвоения значения TextBox3
Public Sub Output_Click(sender As Object, e As EventArgs) Handles Button1.Click
    TextBox3.Text = Calculator("Sub")
End Sub


Также ознакомьтесь с отладкой программы. Например пройдите через Навигация по коду с помощью отладчика[^]


Member 12605293

Привет Мика Венделиус
Спасибо за Ваш быстрый ответ,да, я использовал textbox3 для получения результата, и я согласен использовать всю переменную в качестве параметра внутри функции калькулятора.Мой код работает без каких-либо ошибок, и я задаюсь вопросом, почему он не дает ожидаемого результата в(texbox3)?

Wendelius

Он не показывает выходные данные в textbox3, потому что вы ничего в него не назначаете.
Взгляните на измененный ответ.

Рейтинг:
19

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 параметра:

  1. число, в котором хранится фактический результат (по умолчанию ноль)
  2. число, которое используется для дальнейшего расчета
  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() метод, но..... - Да, ты прав. Хорошая мысль!