dynamische Listbox erstellt; wie ist eine Sektierung möglich?

  • VB.NET

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

    dynamische Listbox erstellt; wie ist eine Sektierung möglich?

    Hallo,
    bin nicht nur neu im Forum, sondern auch Anfänger für VB .net.
    Folgendes Problem habe ich:

    - erstelle eine dynamische Listbox
    - fülle sie mit ADD mit mehreren Begriffen
    - der USER soll eine Begriff auswählen und mit CLICK die Auswahl bestätigen
    - ich habe versucht, diesen CLICK in einer SUB aufzufangen

    jedoch, der Name meiner dynamischen Listbox wird nicht akzeptiert:

    Private Sub selHlpListBox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles selHlpListBox.Click

    es erscheint folgende Fehlermeldung:

    Fehler 1 Die Handles-Klausel erfordert eine WithEvents-Variable, die im enthaltenden Typ oder einem seiner Basistypen definiert wird. I:\VB10_WorkFiles\VB_Projekte\VBFirstMenu\VBFirstMenu\VBFirstForm01.vb 196 105 VBFirstMenu

    Anmerkung: Bei einer " permanenten " Listbox in der gleichen Routine wird das CLICK-Ereignis problemlos abgehandelt.
    Was habe ich nicht verstanden, bzw. was mache ich falsch??

    Vielen Dank für eine Antwort ( hoffentlich Lösung)

    mfg liwo63
    Hey,

    willkommen im Forum 8o

    Die Fehlermeldung sagt Dir im Grunde schon, wo etwas nicht passt. Nämlich erfordert eine Handels-Klausel eine Variable, die mit WithEvents deklariert wurde.

    VB.NET-Quellcode

    1. Private WithEvents _lB As New ListBox()


    Hier ist ein gutes, wenn auch etwas längeres Tutorial: vb-paradise.de/allgemeines/tip…60455-alles-ueber-events/

    Da solltest Du im Grunde jede Information finden, die dieses Thema hergibt. Jedenfalls viele Informationen.

    Falls es noch an Grundlagen mangelt und Du noch kein Buch hast: microsoft.com/germany/msdn/akt…005DasEntwicklerbuch.aspx

    Alternativ, kannst Du Dir das Vorgehen hier auch von der IDE abguggn. Zieh Dir ne ListBox auf die Form und wirf nen Blick in die FormX.Designer.vb. Du wirst sehen, dass die IDE alles mit WithEvents deklariert.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o

    Dynamische Listbox

    Hi,
    vielen Dank für die hilfreiche Antwort. Leider komme ich momentan nicht weiter, da ich mich für meinen " Nebenjob " vorbereiten muß, denn morgen ist Nikolaus!! Danach geht es weiter mit der Entwicklung, und dann werde ich über Erfolg oder Mißerfolg berichten. Sorry!

    Nochmals vielen Dank.

    mfg liwo1963

    Dynamische ListBox

    Hi,
    nach dem " anstrengenden Nikolausjob " geht es jetzt weiter mit der " dynamischen ListBox".
    Dank der ausführlichen Hinweise von SpaceyX habe ich eine Lösung gefunden, die wie folgt aussieht:
    Die dyn.LB muß ( bei mir ) so deklariert werden:

    ' Definieren ListBox waehrend der Laufzeit
    ' sie muss mit EVENT deklatiert werden

    Public WithEvents selHlpListBox As New ListBox

    Was mit nicht so ganz klar ist, bei einer statischen Listbox finde eine ähnliche Deklaration nicht.
    Die " SUB's" sehen bei beiden gleich aus:

    Statisch:

    Private Sub playerListBox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles playerListBox.Click

    Dynamisch:

    Private Sub selHlpListBox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles selHlpListBox.Click

    Trotz der kleinen Wissenslücke komme ich aber zurecht, und gehe davon aus, dass ich das bald richtig verstehe.

    Nochmals herzlichen Dank :) :) .

    mfg liwo1963
    @liwo1963:: Ich nehme mal an, mit "dynamisch" meinst Du, dass die Listbox nicht im Designer erstellt wurde.
    Es gibt 2 äquivalente Möglichkeiten, einen Handler zur ListBox zu erstellen:
    1. über Deklaration mit WithEvents und Handles xxx.yyy, genau so wird es auch vom Designer gemacht
    2. ohne WithEvents, aber mit AddHandler.
    In der Programmabarbeitung sind beide Methoden identisch, daher ist es iwie nicht logisch, die eine statisch und die andere dynamisch zu nennen.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. ' Variablen deklarieren
    3. Private playerListBox As ListBox
    4. Private WithEvents selHlpListBox As ListBox
    5. Public Sub New()
    6. InitializeComponent()
    7. ' Variablen instanziieren
    8. playerListBox = New ListBox
    9. selHlpListBox = New ListBox
    10. ' einen Handler zuweisen
    11. AddHandler playerListBox.Click, AddressOf playerListBox_Click
    12. End Sub
    13. Private Sub playerListBox_Click(sender As System.Object, e As System.EventArgs)
    14. ' was tun
    15. End Sub
    16. Private Sub selHlpListBox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles selHlpListBox.Click
    17. ' was tun
    18. End Sub
    19. 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!
    generell eine schlechte Idee, Listboxen dynamisch zu erzeugen.

    Designe dein Form im Designer, und bei Probleme löse diese mit dem Designer, nicht gegen ihn.

    vlt. erzählst du ühaupt mal das Problem, oder was hat dich auf die Idee gebracht, listboxen dynamisch zu erstellen?

    Warum ListBox zur Laufzeit!

    Es gibt eine Anzahl von registrierten Anwendern, die sich anmelden müssen ( über ListBox per Designer ) und sich für eine Anwendung entscheiden müssen ( ListBox während der Laufzeit ), dazu jeweils ein Leitfaden ( TextBox Laufzeit ). Grund: ich wollte Form nicht überfrachten. Nach Auswahl verschwinden ListBox und TextBox.
    Sicherlich gibt es geschickteres Design. Aber ich arbeite daran, da :) :) ?( s optimale Design zu finden.

    Mit freundlichen Gruß LiWo1963

    liwo1963 schrieb:

    Sicherlich gibt es geschickteres Design.
    Z.B. einen fertigen Dialog, der, so erforderlich, einfach eingeblendet wird.
    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!