VB.net Не могу отобразить вывод в моем списке. Вопрос для начинающих - PullRequest
0 голосов
/ 11 марта 2009

Попытка заставить пользователя поместить 3 числа в 3 текстовых поля и получить среднее значение.

Private Sub btnAverage_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAverage.Click

  Dim a As Integer = CInt(txtone.Text)        
  Dim b As Integer = CInt(txtTwo.Text)
  Dim c As Integer = CInt(txtThree.Text)
  Dim average As Integer   
  average = (a + b + c) / 3

  lstOutput.Text = average

End Sub 

Ответы [ 3 ]

2 голосов
/ 11 марта 2009

Попробуйте изменить тип среднего значения с Integer на Double

Dim average as Double

Сейчас вы пытаетесь сохранить среднее значение в целом числе, которое может содержать только целое число. Средние значения, как правило, не являются целыми числами и нуждаются в типе данных, который может это представить. Двойник хорош для большинства ситуаций. Это должно исправить вашу проблему.

РЕДАКТИРОВАТЬ ОП упомянул, что lstOutput является ListBox

Это одна из запутанных вещей с WinForms. Несмотря на то, что каждый элемент управления имеет свойство Text, не все они на самом деле что-либо делают. Они применяются только к элементам, которые непосредственно отображают один текстовый блок или значение. Ex Button, Label и т.д ...

ListBox, с другой стороны, отображает группу элементов. Вы хотите добавить новый элемент в список.

lstOutput.Items.Add(average.ToString())
1 голос
/ 11 марта 2009

Свойство Text в окне списка получает или устанавливает выбранный элемент . Вы еще не добавили среднее значение в список.

Попытка:

lstOutput.Items.Add(average)

0 голосов
/ 11 марта 2009

Вы уверены, что txtOne.text txtTwo.text и txtThree.txt всегда будут целочисленными значениями?

Возможно, вам также придется изменить переменные a, b, c на Doubles и убедиться, что пользователь не указал нечисловые значения.

Если пользователь введет «один» в текстовое поле txtOne, вы получите исключение kablowee.

(воздушное кодирование здесь)

   dim a as new double
   try
       if isnumeric(txtOne.text.tostring.trim) then
          a = cdbl(txtOne.text.tostring.trim)
       end if

    'repeat for b and c ...

    catch ex as exception
       messagebox.show(ex.message.tostring)
    end try

И я не уверен, прав ли я в этом (возможно, кто-то меня просветит), но .NET рассматривает преобразование типов из строки в int по-разному в этих двух случаях

a  = cint(txtOne.text)

и

a = cint(txtOne.text.tostring)

???

...