ToolStripComboBox != ToolStripComboBox

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von exc-jdbi.

    ToolStripComboBox != ToolStripComboBox

    Moinmoin,

    und jetzt die Freitagsfrage zum Samstag …

    Verwendet wird .net 4.6.1

    Ich verwende in einer Form ein ToolStrip mit mehreren ToolStripButtons und auch einem ToolStripDropDownButton.
    Der TSDDB enthält weitere ToolStripMenuItems und auch eine ToolStripComboBox

    Diese TSCB soll als Datenherkunft eine List (Of T) erhalten.

    Hier mal das Objekt der ListOf als Beispiel;

    VB.NET-Quellcode

    1. Public Class Objects
    2. '...
    3. Public Class Item
    4. Public Property ID As Integer = 0
    5. Public Property Name As String = ""
    6. Sub New(ByVal ID As Integer,
    7. ByVal Name As String)
    8. Const CurrentFunction As String = "Lists." & ObjName & ".Item.New"
    9. Try
    10. With Me
    11. .ID = ID
    12. .Name = Name
    13. End With
    14. Catch ex As Exception
    15. MessageBox.Show(ex.Message, CurrentFunction, MessageBoxButtons.OK, MessageBoxIcon.Error)
    16. End Try
    17. End Sub
    18. End Class
    19. '...
    20. End Class


    Gefüllt wird die ListOf über eine Funktion beim Aufruf des Formulars.

    VB.NET-Quellcode

    1. Private Orders As New List(Of Objects.Orders.Item)
    2. Orders.Add(123, "Pustekuchen")
    3. '...


    Daten sind soweit auch enthalten, lassen sich auch auslesen.

    Das Problem ist jetzt, dass die TSCB keine Daten enthält nach der Bindung, aber auch keine Fehlermeldung ausgegeben wird.

    Bindung erfolgt so …

    VB.NET-Quellcode

    1. With tscb_Orders.ComboBox
    2. .DataSource = Orders.Items
    3. .ValueMember = NameOf(Objects.Orders.Item.ID)
    4. .DisplayMember = NameOf(Objects.Orders.Item.Name)
    5. End With


    Zum testen habe ich die TSCB mal direkt in das ToolStrip gezogen und nicht als Unterobjekt des ToolStripDropDownButtons, und dort funktioniert es problemlos.

    Scheint also ein Problem mit einem TSCB in einem TSDDB zu sein, wenn es mit dem selben Code als TSCB im ToolStrip direkt geht.

    Ich hoffe ihr versteht mein Problem :)

    Gruß und schönes Wochenende

    Kleiner Nachtrag;

    Das SelectedIndexChanged Event reagiert auch wenn die TSCB gefüllt wird, zeigt aber weiterhin keine Daten an.
    Auch über MsgBox(TSCB.ComboBox.Items.Count) bekomme ich eine 0 zurück

    Nachtrag 2:
    Selbst wenn ich die TSCB mit einer List(Of Interger) fülle, sind keine Daten drin, an der Datenherkunft kann es also nicht liegen.

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „BlueLagoonX“ ()

    Hab da was gefunden, was helfen könnte:
    social.msdn.microsoft.com/Foru…orum=winformsdatacontrols
    Weiter unten kommt 'ne Antwort von "nickyG". BindingContext der TSCB auf Me.BindingContext setzen. Und vermutlich ist Me hier die Form.

    PS:
    Orders.Add(123, "Pustekuchen") Ich glaube, das war so nicht gemeint ;)
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    @BlueLagoonX Poste mal ein kleines Projekt, dass Deinen Effekt reproduziert.
    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!
    ToolStripComboBox.ComboBox.BindingContext = Me.BindingContext

    Danke Niko, das wars :)
    Den Sinn dahinter würde ich nur gerne verstehen.

    Die Funktion zum Hochladen finde ich im Beitrag irgendwie nicht …

    Neue Windows Forms App erstellen, ToolStrip mit TSDDB rein und im Code dann …

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim Lst_Int As New List(Of Integer)
    3. For i As Integer = 1 To 50
    4. Lst_Int.Add(i)
    5. Next
    6. With tscb_2
    7. With .ComboBox
    8. .DataSource = Lst_Int
    9. End With
    10. End With
    11. End Sub


    Habs auch unter .Net 2.0 versucht, mit dem selben Ergebniss.

    BlueLagoonX schrieb:

    Die Funktion zum Hochladen
    Erweiterte Antwort => Dateianhänge => Hochladen.
    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!
    List(Of int32) besitzt kein Property das einfach so abgefragt werden kann.

    Mach dir eine Klasse in etwa so

    VB.NET-Quellcode

    1. Public Class ListInfo
    2. Public Property ValInt32 As Int32
    3. End Class


    Und damit das Ganze auch funktioniert muss der BindingContext auch gesetzt sein

    Das könnte funktionieren (ungetestet)
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Option Strict On
    2. Option Explicit On
    3. Public Class Form1
    4. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    5. Dim Lst_Int As New List(Of ListInfo)
    6. For i As Integer = 1 To 50
    7. Lst_Int.Add(New ListInfo With {.ValInt32 = i})
    8. Next
    9. With tscb_2
    10. With .ComboBox
    11. .BindingContext = Me.BindingContext
    12. .DataSource = Lst_Int
    13. .ValueMember = "ValInt32"
    14. End With
    15. End With
    16. 'With Binding
    17. Me.BindingSource1.DataSource = Lst_Int
    18. With tscb_3
    19. With .ComboBox
    20. .BindingContext = Me.BindingContext
    21. .DataSource = Me.BindingSource1
    22. .ValueMember = "ValInt32"
    23. End With
    24. End With
    25. With tscb_1
    26. With .ComboBox
    27. '.BindingContext = Me.BindingContext
    28. .DataSource = Me.BindingSource1
    29. .ValueMember = "ValInt32"
    30. End With
    31. End With
    32. End Sub
    33. End Class


    Freundliche Güsse

    exc-jdbi

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „exc-jdbi“ ()