Combobox mit Daten füttern

  • VB.NET

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

    Combobox mit Daten füttern

    so hallo ihr lieben,

    Wollt mal nachfragen obs funzt, und zwar gibt es ja im html diese Combobox als <select>
    so wennman diese befüllt kann man ja ein Value vergeben und ein Namen für den Value.

    aber wie bekomm ich das hier bei VB2010 hin?

    also ich hab einige eingaben (für einen Player) wo ich ja die URLs der Radios reingehauen habe. nun möchte ich aber das die URL IP:Port nicht so da steht sondern anstelle des IP:Port > Radio... steht.

    bislang hab ich das hier leíder nur...

    VB.NET-Quellcode

    1. ComboBox1.Items.Add("http://ip1:port1")
    2. ComboBox1.Items.Add("http://ip2:port2")
    3. ComboBox1.Items.Add("http://ip3:port3")
    ick glob hast misch grad falsch verstanden...

    die jeweiligen streams unterscheiden sich unteranderem einma von der IP und zum anderen will ich ja anstelle die IP:Port den Radionamen da haben.

    also hier mal ein Beispiel...

    in html hei´ßt das so

    <select>
    <option value="IP2:Port1">RadioName</option>
    <option value="IP2:Port2">RadioName</option>
    <option value="IP3:Port3">RadioName</option>
    </select>

    das heißt ich möchte das in der Combobox der Radioname steht, und wenn ich diesen auswähle, dass Dann ich auf Go / Start klick das dann die IP:Port gelesen wird.

    hoffe das is verständlicher nun...

    aber dennoch danke
    Hi.

    Erstelle eine neue Klasse mit den Membern IP, Port und Name. Überschreibe die ToString-Methode und gib dort den Namen zurück. Der Konstruktor sollte 3 Parameter haben und die Member befüllen. Beim Füttern der ComboBox erstellst du Instanzen deiner Klasse und übergibst IP, Port und Name. Die Instanzen fügst du zur ComboBox hinzu. Daraufhin werden die vergebenen Namen in der Box stehen. Wird ein Element ausgewählt (SelectedIndexChanged), konvertierst du es von Object in deine Klasse und rufst die IP- und die Port-Eigenschaft ab.
    Gruß
    hal2000
    gibts da och ne einfachere lösung? *doof gugg* weil das was du da gerade geschrieben hast bekomm ick irgendwie ned hin weil ich ned weiß wie ich damit am besten anfangen kann... hab bis dato imo nur mit den einfachstem vom einfachsten gearbeitet, weil das bislang reichte :X *nu schweig*
    Es sind verschiedene optimale Ansätze denkbar, abhängig von dem, was du brauchst.
    Aber bei allen wirst du mehr oder weniger was neues dazulernen müssen (dürfen).

    Wovon es abhängt:
    Derzeit ist erkennbar, dass 2 Daten zusammenhängen, nämlich "IP:Portname" und "Radioname"
    Wenn das alles ist, kann man sogar mit einem KeyValuePair(of String, String) hinkommen, s.u.

    Wenn du aber noch mehr irgendwie geartete Daten zu verarbeiten hast, oder die Daten auch speicherbar sein sollen, ist ein typisiertes Dataset das einfachste.

    Letzteres ist aber viel Lernstoff. Aber dafür ist es unendlich erweiterbar. Also wenn man fürs Datenmodell einer App gleich aufs typisierte Dataset setzt, kommt man nie an die Grenzen des technisch möglichen, egal, welche Zusatz-Anforderungen im Entwicklungsprozeß sich auftun mögen.

    Hier das einfachste (aber nicht sehr erweiterbare):

    VB.NET-Quellcode

    1. Private _ComboSource As New List(Of KeyValuePair(Of String, String))
    2. Private Sub Form2_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
    3. 'Radiostationen in _ComboSource laden
    4. _ComboSource.Add(New KeyValuePair(Of String, String)("http:\\radio1.com", "radio1"))
    5. _ComboSource.Add(New KeyValuePair(Of String, String)("http:\\radio2.com", "radio2"))
    6. _ComboSource.Add(New KeyValuePair(Of String, String)("http:\\radio3.com", "radio3"))
    7. _ComboSource.Add(New KeyValuePair(Of String, String)("http:\\radio4.com", "radio4"))
    8. _ComboSource.Add(New KeyValuePair(Of String, String)("http:\\radio5.com", "radio5"))
    9. 'Combo anschließen
    10. With ComboBox1
    11. .DisplayMember = "Value"
    12. .ValueMember = "Key"
    13. .DataSource = _ComboSource
    14. End With
    15. End Sub
    16. Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles ComboBox1.SelectedIndexChanged
    17. Dim choosen = _ComboSource(ComboBox1.SelectedIndex)
    18. MsgBox(String.Concat("gewählt wurde: ", choosen.Value, " (", choosen.Key, ")"))
    19. End Sub
    Die Klasse ist (meiner Meinung nach) der bessere Weg, weil erweiterbar. Lässt sich nur nicht einfach beschreiben. Sauber implementiert kommt man auf ~25 Zeilen. Kombiniert mit des Erfinders Lösung (:)) ein schönes Konstrukt.
    Gruß
    hal2000

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „hal2000“ ()

    Wenn Datenklassen, dann bitte typisiertes Dataset.
    Das ist schneller programmiert als der von dir favorisierte Eigenbau, und Speichern/Laden, Sortieren, Filtern, Suchen, Hierarchische Strukturen - Anzeige in Combobox, Listbox oder Datagridview - alles ist gleich mit drin!

    Mach dirmal die Mühe, und guck dir "DatasetOnly" auf Movie-Tuts an.

    In aller Unbescheidenheit denke ich, das Wissen ist geeignet, eines Proggers Programmierstil auf ein anderes Niveau zu bringen.

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

    ErfinderDesRades schrieb:

    Es sind verschiedene optimale Ansätze denkbar, abhängig von dem, was du brauchst.
    Aber bei allen wirst du mehr oder weniger was neues dazulernen müssen (dürfen).

    Wovon es abhängt:
    Derzeit ist erkennbar, dass 2 Daten zusammenhängen, nämlich "IP:Portname" und "Radioname"
    Wenn das alles ist, kann man sogar mit einem KeyValuePair(of String, String) hinkommen, s.u.

    Wenn du aber noch mehr irgendwie geartete Daten zu verarbeiten hast, oder die Daten auch speicherbar sein sollen, ist ein typisiertes Dataset das einfachste.

    Letzteres ist aber viel Lernstoff. Aber dafür ist es unendlich erweiterbar. Also wenn man fürs Datenmodell einer App gleich aufs typisierte Dataset setzt, kommt man nie an die Grenzen des technisch möglichen, egal, welche Zusatz-Anforderungen im Entwicklungsprozeß sich auftun mögen.

    Hier das einfachste (aber nicht sehr erweiterbare):

    VB.NET-Quellcode

    1. Private _ComboSource As New List(Of KeyValuePair(Of String, String))
    2. Private Sub Form2_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
    3. 'Radiostationen in _ComboSource laden
    4. _ComboSource.Add(New KeyValuePair(Of String, String)("http:\\radio1.com", "radio1"))
    5. _ComboSource.Add(New KeyValuePair(Of String, String)("http:\\radio2.com", "radio2"))
    6. _ComboSource.Add(New KeyValuePair(Of String, String)("http:\\radio3.com", "radio3"))
    7. _ComboSource.Add(New KeyValuePair(Of String, String)("http:\\radio4.com", "radio4"))
    8. _ComboSource.Add(New KeyValuePair(Of String, String)("http:\\radio5.com", "radio5"))
    9. 'Combo anschließen
    10. With ComboBox1
    11. .DisplayMember = "Value"
    12. .ValueMember = "Key"
    13. .DataSource = _ComboSource
    14. End With
    15. End Sub
    16. Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles ComboBox1.SelectedIndexChanged
    17. Dim choosen = _ComboSource(ComboBox1.SelectedIndex)
    18. MsgBox(String.Concat("gewählt wurde: ", choosen.Value, " (", choosen.Key, ")"))
    19. End Sub



    Ersteinmal Vielen rechtherzlichen Dank für diesen Lösungsweg. Hat mir sehr weiter geholfen. nun würd ich gern noch nen Button dazugeben, welcher es ermöglicht, weitere Radios hinzuzufügen / löschen. wie wäre dafür denn nen Ansatz?
    nimm doch einfach ein const string array in das kommt dann immer die addresse an sich sprich ip und port. Und dann fügste einfach schon im designer die ganzen namen ein. Anschließend fragste einfach index ab also selectedindex und dadurch holst die addresse vom array also array(selectedindex). Das ganze ist aber natürlich nicht dynamisch und längst nicht so schön wie das von halo


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.

    devilofcrash schrieb:

    Ersteinmal Vielen rechtherzlichen Dank für diesen Lösungsweg. Hat mir sehr weiter geholfen. nun würd ich gern noch nen Button dazugeben, welcher es ermöglicht, weitere Radios hinzuzufügen / löschen. wie wäre dafür denn nen Ansatz?
    Also anhand deiner Frage kommen mir Zweifel, obs dir wirklich weitergeholfen hat.
    Weil die Befehle zum Hinzufügen stehen da doch - irgendwas mußt du doch auch selbst programmieren.

    Achso, dann solltest du die List(Of T) durch System.ComponentModel.BindingList(Of T) ersetzen.

    Also was dir glaub wirklich weiterhelfen täte, wäre Buch Lesen

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