2015-04-25 1 views
0

Я начинаю и пытаюсь создать приложение Windows Phone с помощью vb.net. Я хочу проверить пустое текстовое поле, но как только запустить приложение, это заблокировано и оно показывает следующую ошибку исключения. Это вычисляет штраф, если поля заполнены, но если какое-то поле пусто, появляется ошибка.Проверка пустое текстовое поле в VB.NET

El código de usuario no controló System.InvalidCastException 
    HResult=-2147467262 
    Message=Input string was not in a correct format. 
    Source=Conversionvbnet 
    StackTrace: 
     at Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger(String Value) 
     at Conversionvbnet.CourseGSWCA.calculatebtn_Click(Object sender, RoutedEventArgs e) 
     at System.Windows.Controls.Primitives.ButtonBase.OnClick() 
     at System.Windows.Controls.Button.OnClick() 
     at System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(MouseButtonEventArgs e) 
     at System.Windows.Controls.Control.OnMouseLeftButtonUp(Control ctrl, EventArgs e) 
     at MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj, IntPtr unmanagedObjArgs, Int32 argsTypeIndex, Int32 actualArgsTypeIndex, String eventName) 
    InnerException: System.FormatException 
     HResult=-2146233033 
     Message=Input string was not in a correct format. 
     Source=Conversionvbnet 
     StackTrace: 
      at Microsoft.VisualBasic.CompilerServices.Conversions.ParseDouble(String Value) 
      at Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger(String Value) 
     InnerException: 

И подмигнул код:

Private Sub calculatebtn_Click(sender As Object, e As RoutedEventArgs) Handles calculatebtn.Click 
    Dim windspeed As String = wsptxt.Text 
    Dim windirection As String = wdtxt.Text 
    Dim heading As String = headingtxt.Text 
    Dim speed As String = tastxt.Text 
    Dim valor As String = datosmsg.Text 

    If String.IsNullOrEmpty(wsptxt.Text.ToString()) Then 
     MessageBox.Show("Faltan datos") 
    ElseIf String.IsNullOrEmpty(wdtxt.Text.ToString()) Then 
     MessageBox.Show("Faltan datos") 
    ElseIf String.IsNullOrEmpty(headingtxt.Text.ToString()) Then 
     MessageBox.Show("Faltan datos") 
    ElseIf String.IsNullOrEmpty(tastxt.Text.ToString()) Then 
     MessageBox.Show("Faltan datos") 
    End If 

    datosmsg.Text = CStr(CInt(wsptxt.Text) + CInt(wdtxt.Text) + CInt(headingtxt.Text) + CInt(tastxt.Text)) 

Я не знаю точно, что случилось об этом. Я пробовал много способов и обнаружил ту же ошибку.

Заранее спасибо

Reg

+0

Не используйте CInt(), когда код уже решил, что текст не является действительным. Для этой цепочки команд If/ElseIf вам нужно предложение Else. Переместите последнюю строку кода в нее. –

ответ

0

Есть несколько способов преобразования Strings в Int32. Тот, который вы реализуете, CInt, выбрасывает System.InvalidCastException за недействительное литье.


В вашем коде вы тестируете String.IsNullOrEmpty, но вы разрешаете код продолжать работать, и он позже не сможет Cast даже после того, как вы представили MessageBox. Один из способов справиться с этим может состоять в том, чтобы добавить Exit Sub после отображения окна сообщения, но на самом деле он не справляется со всеми возможными ошибками.
Таким образом, вы можете поместить этот раздел кода в блок Try, а затем Catch System.InvalidCastException, чтобы вы могли правильно обработать эту ошибку или реализовать другой метод преобразования. Возможно, что-то вроде:

Dim windspeed As Int32 
    Dim windirection As Int32 
    Dim heading As Int32 
    Dim speed As Int32 

    If Int32.TryParse(wsptxt.Text, windspeed) AndAlso 
     Int32.TryParse(wdtxt.Text, windirection) AndAlso 
     Int32.TryParse(headingtxt.Text, windirection) AndAlso 
     Int32.TryParse(tastxt.Text, windirection) Then 
     datosmsg.Text = (windspeed + windirection + heading + speed).ToString 
    Else 
     MessageBox.Show("Faltan datos") 
    End If 
0

Спасибо за все, и он работает. Кроме того, я искал в справке mdsn и увидел выражение Return, и оно работает. Это образец:

Dim windspeed As String = wsptxt.Text 
    Dim windirection As String = wdtxt.Text 
    Dim heading As String = headingtxt.Text 
    Dim speed As String = tastxt.Text 
    Dim valor As String = datosmsg.Text 

    If String.IsNullOrEmpty(wsptxt.Text.ToString()) Then 
     MessageBox.Show("Faltan datos") 
     Return 
    ElseIf String.IsNullOrEmpty(wdtxt.Text.ToString()) Then 
     MessageBox.Show("Faltan datos") 
     Return 
    ElseIf String.IsNullOrEmpty(headingtxt.Text.ToString()) Then 
     MessageBox.Show("Faltan datos") 
     Return 
    ElseIf String.IsNullOrEmpty(tastxt.Text.ToString()) Then 
     MessageBox.Show("Faltan datos") 
     Return 
    End If 

    datosmsg.Text = CStr(CInt(wsptxt.Text) + CInt(wdtxt.Text) + CInt(headingtxt.Text) + CInt(tastxt.Text)) 

Но я буду использовать ваш код, потому что он прав!

Спасибо за все!

С уважением

0

попробуйте следующее

foreach (Control ctrl in this.groupBox1.Controls) 
{ 
    if (ctrl is TextBox) 
    { 
     if (ctrl.Text != "") 
     { 
      `enter code here` 
     } 
    } 
} 
+0

надеюсь, что это сработает для вас, сегодня я просто думаю, что это сработает, и для меня это работает ... мой английский воняет xD –