#vb.net #forms #class #oop #textbox
Вопрос:
Поэтому я создал класс под названием «порядок», из которого, когда я создаю экземпляр объекта в основной форме, значение текстового поля передается в качестве параметра. И это текстовое поле, в которое я пытаюсь написать- «txttotal.text».
Dim order1 As New order
order1.AddItem(menuItem)
order1.OrderTotal(txttotal.Text)
А затем я использую этот параметр в методе класса, чтобы записать значение «fullamount» в текстовое поле. Но когда я запускаю его и после вычисления полного числа, в текстовом поле ничего не появляется. Я не уверен, что делаю что-то не так. Должен ли я использовать функцию?
Public Sub OrderTotal(total)
Dim fullamount As Decimal = 0
For Each item As MenuItem In Items
fullamount = CDec(item.Cost)
total = fullamount
Next
End Sub
Комментарии:
1.
txttotal.Text
это аString
, а не аTextBox
. ВашOrder
объект ничего не знает оTextBox
том, чтоString
произошло, и не должен знать. Вы передаете существующееString
, так что это ввод, а не вывод. Если этот объект выполняет вычисление, то он должен передать результат этого вычисления обратно, и форма должна обновитьTextBox
. Да, вы должны использовать функцию.2. Вы используете неправильные типы данных,
Cost
Decimal
в классе должно быть aOrder
. Вы должны преобразоватьtxttotal.Text
свойство вDecimal
использованиеDecimal.TryParse(...)
метода. Обратите внимание на типы данных.3. Включите параметр Строгий в Свойствах и инструментах проекта->Параметры->>Проекты и решения->>>VB по умолчанию. Исправьте ошибки, на которые это укажет.
4. У вас есть собственный
MenuItem
класс? Окна. ФормыMenuItem
не имеютCost
свойства. Что такоеItems
? Я думаю, нам нужно увидеть твой классorder
. Почему ты переходишьtotal
на субмарину? Сделайте это функциейGetOrderTotal
и верните общее количество.
Ответ №1:
Может быть, тебе стоит сделать это вот так. Сначала получите total
значение в виде текста из txttotal.text
txttotal.text
, а затем заполните его новым вычисленным значением.
Dim order1 As New order
order1.AddItem(menuItem)
dim total = txttotal.Text
txttotal.Text = order1.OrderTotal(total)
Преобразуйте ваш Sub
в a Function
, который возвращает значение, которое будет заполнять txttotal.Text
.
Public Function OrderTotal(Byval total)
Dim fullamount As Decimal = 0
For Each item As MenuItem In Items
fullamount = CDec(item.Cost)
total = fullamount
Next
Return total
End Sub