Zeichnen einer ComboBox

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von FreShmaKer.

    Zeichnen einer ComboBox

    Guten Morgen an die "Helfer" :D

    Ich habe in meiner Form im Load_Event ff. Code geschrieben, um eine ComboBox zu zeichnen und zu füllen:
    Hier der Code

    VB.NET-Quellcode

    1. Dim cb As New ComboBox
    2. cb.Location = New Point(62, 13) : cb.Height = 13
    3. cb.FlatStyle = FlatStyle.Popup : cb.DropDownStyle = ComboBoxStyle.DropDownList
    4. cb.Items.AddRange(New String() {"Index 0", "Index 1", "Index 2", "Index 3", "Index 4"})
    5. Me.GroupBox1.Controls.Add(cb)
    6. Dim g As Graphics = cb.CreateGraphics()
    7. Dim Breite, MaxBreite As Single
    8. For Each Element In cb.Items
    9. Breite = g.MeasureString(Element.ToString, cb.Font).Width
    10. If Breite > MaxBreite Then MaxBreite = Breite
    11. Next
    12. cb.Width = CInt(MaxBreite) + 20



    Nun möchte ich gerne auch den SelctedIndex abfragen.
    Beispiel

    VB.NET-Quellcode

    1. If cb.SelectedIndex = 0 Then
    2. 'tu was
    3. Else
    4. 'tu nix
    5. End If

    Wie erstelle ich das SelectedChange-Event?
    Probier mal dies:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private WithEvents cb As New ComboBox
    3. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    4. AddHandler cb.SelectedIndexChanged, AddressOf My_SelectedIndexChanged
    5. End Sub
    6. Private Sub My_SelectedIndexChanged(sender As System.Object, e As System.EventArgs)
    7. ' etwas tun
    8. End Sub
    9. End Class
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Guten Morgen RodFromGermany :)
    Ich habe deinen Vorschlag ausprobiert.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. IImports System.IO
    2. Public Class CMS_VW
    3. Private WithEvents cb As New ComboBox
    4. Private Sub CMS_VW_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    5. Dim cb As New ComboBox
    6. cb.Location = New Point(100, 30) : cb.Height = 13
    7. cb.FlatStyle = FlatStyle.Popup : cb.DropDownStyle = ComboBoxStyle.DropDownList
    8. cb.Items.AddRange(New String() {"Index 0", "Index 1", "Index 2", "Index 3", "Index 4"})
    9. Me.GroupBox1.Controls.Add(cb)
    10. Dim g As Graphics = cb.CreateGraphics()
    11. Dim Breite, MaxBreite As Single
    12. For Each Element In cb.Items
    13. Breite = g.MeasureString(Element.ToString, cb.Font).Width
    14. If Breite > MaxBreite Then MaxBreite = Breite
    15. Next
    16. cb.Width = CInt(MaxBreite) + 20
    17. End Sub
    18. Private Sub cb_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles cb.SelectedIndexChanged
    19. If cb.SelectedIndex = 1 Then
    20. MsgBox("Index 1 gewählt :)")
    21. End If
    22. End Sub
    23. End Class

    Leider wird der Code im cb.SelectedIndexChanged-Event nicht ausgelöst. Die MsgBox wird mir nicht angezeigt.

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

    FreShmaKer schrieb:

    Ich habe deinen Vorschlag ausprobiert.
    Leider nicht, Du hast 2 Fehler gemacht. ;(
    1.

    VB.NET-Quellcode

    1. AddHandler cb.SelectedIndexChanged, AddressOf My_SelectedIndexChanged
    2.

    VB.NET-Quellcode

    1. Private Sub My_SelectedIndexChanged(sender As System.Object, e As System.EventArgs)
    2. Dim cb As ComboBox = DirectCast(sender, ComboBox)
    3. If cb.SelectedIndex = 1 Then
    4. MsgBox("Index 1 gewählt :)")
    5. End If
    6. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ah. Jetzt habe ich verstanden wie du es meinst! Demnach funktioniert es auch! :thumbsup:

    Hier der komplette Code

    VB.NET-Quellcode

    1. Imports System.IO
    2. Public Class CMS_VW
    3. Private WithEvents cb As New ComboBox
    4. Private Sub CMS_VW_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    5. Dim cb As New ComboBox
    6. cb.Location = New Point(62, 13) : cb.Height = 13
    7. cb.FlatStyle = FlatStyle.Popup : cb.DropDownStyle = ComboBoxStyle.DropDownList
    8. cb.Items.AddRange(New String() {"Index 0", "Index 1", "Index 2", "Index 3", "Index 4"})
    9. Me.GroupBox1.Controls.Add(cb)
    10. AddHandler cb.SelectedIndexChanged, AddressOf cb_SelectedIndexChanged
    11. Dim g As Graphics = cb.CreateGraphics()
    12. Dim Breite, MaxBreite As Single
    13. For Each Element In cb.Items
    14. Breite = g.MeasureString(Element.ToString, cb.Font).Width
    15. If Breite > MaxBreite Then MaxBreite = Breite
    16. cb.Width = CInt(MaxBreite) + 20
    17. Next
    18. End Sub
    19. Private Sub cb_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
    20. Dim cb As ComboBox = DirectCast(sender, ComboBox)
    21. If cb.SelectedIndex = 1 Then
    22. MsgBox(cb.SelectedItem & " gewählt :)")
    23. End If
    24. End Sub
    25. End Class

    Ist es so korrekt, oder sollte ich ggf. etwas ändern? :)
    Wenn der Code so funktioniert wie Du es Dir vorstellst, ist er (zunächst) in Ordnung.
    Was noch zu ändern wäre, wirst Du merken, wenn Du mit dem Code / dem Programm arbeitest.
    Und Dir meinen Code-Stil aufzwängen werde ich ganz bestimmt nicht.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!