Abfrage ob eine Combobox leer ist erstellen

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von hablais.

    Abfrage ob eine Combobox leer ist erstellen

    Hallo,

    ich möchte per Button klick eine weitere form aufrufen.
    Soweit schaffe ich das nur wenn die Combobox leer ist bekomme ich einen Fehler:
    Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

    Dann markiert er die komplette Zeile 12.
    Ich bin noch relativ neu in VB und weiß nicht ganz genau was es mit dem Fehler auf sich hat.
    Die einfachste Lösung erscheint mir eine Abfrage zu erstellen ob die Combobox leer ist und das dann nichts passiert wenn man auf den Button klickt.

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub SchliessenToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SchliessenToolStripMenuItem.Click
    3. Me.Close()
    4. End Sub
    5. Private Sub InformationenToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles InformationenToolStripMenuItem.Click
    6. info.Show()
    7. End Sub
    8. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    9. If ComboBox1.SelectedItem.ToString = "Druide" Then
    10. Druide.Show()
    11. End If
    12. End Sub
    13. End Class



    Lieben Gruß

    Hablais
    Du hast kein Eintrag ausgewählt deswegen gibt er dir eine Fehler-Meldung zurück.

    1) Du kannst dass ganze via Try/Catch/Finally abfangen.

    2) Du setzt einfach "ComboBox1.SelectedIndex = 0" ein, er ist sonst auf -1 also nichts, 0 ist dann der erste eintrag.
    Habe es selbst gelöst.
    Weiß zwar nicht ob es eine elegante Lösung ist (wenn nicht bitte korrigieren) aber so siehts jetzt aus:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Dim strvalues As String = ComboBox1.SelectedItem
    3. Select strvalues
    4. Case "Druide"
    5. Druide.Show()
    6. Case ("")
    7. MsgBox("Oh oh")
    8. End Select
    9. End Sub


    Gruß

    Hablais
    Die Select case-Geschichte ist an sich für deine Anwendung das optimale, da sicher noch andere Einträge als "Druide" kommen. setze dann aber statt Case"" einfach Case Else ein. Dann werden alle nicht aufgeführten Bedingungen dort abgefangen.
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    Hallo Vatter,

    das mit dem Case Else habe ich probiert nur gibt es ein Problem wenn ich es schreibe.

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Dim strvalues As String = ComboBox1.SelectedItem
    3. Select strvalues
    4. Case "Druide"
    5. Druide.Show()
    6. Case Else "Hexenmeister"
    7. Hexenmeister.Show()
    8. Case Else "Jäger"
    9. Jäger.Show()
    10. Case Else "Krieger"
    11. Krieger.Show()
    12. Case Else "Magier"
    13. Magier.Show()
    14. Case Else ("")
    15. MsgBox("Oh oh, wähle Weise!")
    16. End Select
    17. End Sub


    Ab Case Else Jäger und alle folgenden unterstreicht er mir das Case und sagt es gäbe einen Fehler, gibt selbst aber keine Lösungsvorschläge oder nähere Beschreibung aus. Oder habe ich Case Else falsch verstanden?

    Zudem ist noch ein anderes Problem aufgetreten:
    Ich möchte gern ,wenn ich eine von den oben aufgeführten Formen aufrufe, dass sich die Start Formn (Form1 hier) schließt.
    Wenn ich es so schreibe:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Dim strvalues As String = ComboBox1.SelectedItem
    3. Select strvalues
    4. Case "Druide"
    5. Druide.Show()
    6. Me.Close()
    7. Case Else ("")
    8. MsgBox("Oh oh, wähle Weise!")
    9. End Select
    10. End Sub


    schließt er alles und nicht nur die Start Form.

    Wie kann ich das realisieren?


    Gruß

    Hablais
    du darfst nur eines in Case Else setzten, des heißt nämlich, wenn dein Case irgendwas anderes ist.

    Das heißt du machst einfach überall des Case Else weg außer beim letzten und beim letztenmachsch du noch des ("") weg, weil "Alles Andere"(nix anderes haißt Case Else) kann man nicht eingrenzen.
    des isch wie bei einem If-Block.

    Gruß Einsteiger
    1. Case Else ohne Argumente schreiben, da dieses aufgerufen wird, wenn keine der übrigen case-Bedingungen zutrifft (Else = sonst)
    2. In den Projekteigenschaften stellst du ein. ob deine Application beim schließen des Startformulars oder erst mit der letzten Form beendet werden soll (Modus für Herunterfahren)

    Edit: Achte mal mehr auf die Intellisense. die gibt dir alles vor. Schreib z.B Sel, schon bietet sie dir select an und in dem aufploppenden Hinweis steht: drücken Sie 2 mal die Tab-Taste um eine Select case Block einzufügen. Da ist alles feddich.
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    Hallo,

    also das mit dem Case Else funktioniert super. Vielen Dank dafür.
    Aber das mit dem schließen habe ich nicht ganz verstanden.

    Er soll wenn ich in der Combobox1 etwas gewählt habe und ich auf Start klicke diese aktive Form1 schließen, während er die andere ,Form2, öffnet.

    So Funktioniert es nicht:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Dim strvalues As String = ComboBox1.SelectedItem
    3. Select Case strvalues
    4. Case "Druide"
    5. Druide.Show()
    6. Me.Close()
    7. Case Else
    8. MsgBox("Oh oh, wähle Weise!")
    9. End Select
    10. End Sub




    Gruß

    Hablais

    EDIT: Habe einen Weg gefunden (wie du gesagt hast nur das ich zu blöd war auch richtig hinzuschauen^^). Es ergibt sich aber noch ein Problem damit.
    Wenn ich jetzt von Form1 zu Form2 gehe schließt sich Form1 jetzt wie gewünscht aber wiederhole ich das ganze: von Form2 zu Form1 zurück und dann wieder von Form1 zu Form2 schließt es sich wieder ganz.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „hablais“ ()