VB Programm funzt net

Black_Panter

Ensign
Registriert
Mai 2006
Beiträge
197
bei folgendem code

Code:
Public Class Form1

    Public Function Round(ByVal Number As Double, _
     ByVal Digits As Integer) As Double
        Round = Int(Number * 10 ^ Digits + 0.5) / 10 ^ Digits
    End Function

    Private Sub Button1_Click()
        Dim com_state, lbl_output, txt_input As Object
        Dim speed, indexzahl, way, state, speed_input As Single
        Dim zustand(4) As String
        zustand(0) = 1
        zustand(1) = 0.5
        zustand(2) = 0.35
        zustand(3) = 0.15

        indexzahl = com_state.ListIndex
        state = zustand(indexzahl)

        speed_input = txt_input.Text / 3.6

        If Not IsNumeric(speed) Then
            MsgBox("Falsche Eingabe")
            GoTo theEnd
        Else

            way = Round((speed ^ 2) / (2 * 12 * state), 5)

            If speed < 0 Or speed > 400 Then
                MsgBox(speed & "km/h ist keine gültige Eingabe! Der wert muss zwischen 0 und 400 km/h liegen!")
            Else
                If way < 1 Then
                    lbl_output.Caption = "Der Bremsweg beträgt " & Round(way * 100, 2) & " cm"
                Else : lbl_output.Caption = "Der Bremsweg beträgt " & Round(way, 2) & " m"
                End If
            End If
        End If

theEnd:
    End Sub


End Class

wird mir

Code:
Warnung	1	Die com_state-Variable wird verwendet, bevor ihr ein Wert zugewiesen wird. Zur Laufzeit kann eine Nullverweisausnahme auftreten.	D:\Dokumente und Einstellungen\Administrator\Eigene Dateien\Visual Studio 2005\Projects\Form1.vb	17	21	Bremswegrechner

was is and em code falsch?
die bezeichnungen stimmen alle.

com_state ist eine Combobox
txt_input ist eine TextBox
lbl_output ist Label
und cmd_button ist ein Button
 
Zuletzt bearbeitet:
Wenn com_state eine Combobox ist, warum (re-)definierst Du diese dann als Object (Dim com_state As Object)? Lass das mal weg und die Warnung sollte nicht mehr kommen.
 
Das Problem tritt bei dieser Anweisung auf:
Code:
indexzahl = com_state.ListIndex
Du deklarierst zwar die lokale Variable com_state, weist aber bis zu diesem Aufruf keinerlei Wert zu, also wird diese Variable an dieser Stelle unweigerlich null (Nothing in VB) sein. Demnach kannst Du auch keinen ListIndex abfragen, weil die Variable auf kein Objekt verweist, welches diese Eigenschaft besitzt.

Wie bereits angedeutet, müsstest Du den Object-Typ ohnehin erst auf ComboBox casten. Warum definierst Du also com_state nicht gleich als ComboBox?

Falls Du direkt auf die ComboBox in Deinem Formular zugreifen willst, definiere keine lokale Variable, sondern verwende direkt: Me.combo1

(Hoffentlich ist Me das Pendant zu this - ich mache nicht so viel mit VB)
 
Du brauchst gar kein me;)
Einfach im GUI eine Combobox definieren (z.B. mit dem Namen cmb_kombobox) und dann darauf zugreifen. Von außerhalb der Klasse dann mit Form1.cmb_kombobox
 
Zurück
Oben