programowanieProgramista aplikacji desktopowych w Visual Basic

Jak zrealizować obsługę wejścia użytkownika (na przykład z TextBox), z uwzględnieniem sprawdzenia, czy wpisana wartość to liczba, oraz zapobieganie błędom konwersji typów w Visual Basic?

Zdaj rozmowy kwalifikacyjne z asystentem AI Hintsage

Odpowiedź.

W obsłudze wejścia użytkownika kluczowe jest zapobieganie błędom konwersji typów, gdy użytkownik na przykład wpisuje coś, co nie jest liczbą w TextBox. Jest to ważne dla zapewnienia odporności działania aplikacji.

Historia pytania:

W VB6 i VB.NET błędy konwersji (na przykład za pomocą CInt lub Val) prowadziły do awarii. Później pojawiły się bezpieczniejsze środki, takie jak Integer.TryParse.

Problem:

Przy próbie konwersji nieprawidłowych danych (litery, znaki specjalne, pusty ciąg) standardowe metody (CInt, CDbl) rzucają wyjątek. W rezultacie aplikacja może zakończyć działanie w sposób nieoczekiwany.

Rozwiązanie:

Do bezpiecznej konwersji użyj TryParse. Zwraca on logiczny wynik operacji przekształcenia ciągu na liczbę i zapobiega wyjątkami.

Przykład kodu:

Dim input As String = TextBox1.Text Dim number As Integer If Integer.TryParse(input, number) Then MessageBox.Show($"Wprowadziłeś liczbę: {number}") Else MessageBox.Show("Błąd: wprowadzono coś, co nie jest liczbą") End If

Kluczowe cechy:

  • TryParse nie rzuca wyjątków przy niepowodzeniu
  • Umożliwia elastyczne reagowanie na nieprawidłowe wejście
  • Całkowicie zgodne z lokalizacją i formatami

Pytania z pułapką.

Co zwróci funkcja Val("123abc") i dlaczego może to być niebezpieczne?

Val("123abc") zwróci 123, ignorując niecyfrowe znaki po liczbie, co prowadzi do błędów, jeśli użytkownik przypadkowo wprowadzi dodatkowy znak.

Czy można przekonwertować pusty ciąg za pomocą CInt("")?

Nie, funkcja zgłosi wyjątek InvalidCastException.

Jaki podejście wybrać dla liczb zmiennoprzecinkowych z uwzględnieniem lokalizacji?

Użyj Double.TryParse z określeniem CultureInfo, ponieważ w niektórych lokalizacjach przecinek , jest separatorem części dziesiętnej, a w innych kropka ..

Dim value As Double Dim isParsed = Double.TryParse("3,14", NumberStyles.Any, CultureInfo.CurrentCulture, value)

Typowe błędy i antywzorce

  • Używanie Val do uzyskania liczby z niekontrolowanym wynikiem
  • Stosowanie CInt bez sprawdzania zawartości
  • Brak komunikatów o błędach wprowadzenia użytkownika

Przykład z życia

Negatywny przypadek

Programista bezpośrednio konwertuje tekst z pola na liczbę: Dim n = CInt(TextBox1.Text) bez sprawdzenia.

Zalety:

  • Minimalny kod

Wady:

  • Program się wyłącza przy nieprawidłowym wejściu
  • Brak komunikatów o błędach

Pozytywny przypadek

Użycie TryParse z powiadomieniem użytkownika o nieprawidłowym wejściu (patrz powyższy przykład).

Zalety:

  • Odporna aplikacja
  • Lepsze doświadczenia użytkownika

Wady:

  • Należy dodać więcej kodu do obsługi błędów i lokalizacji komunikatów