Panel mit Label verbinden bzw. bei beiden gleiches ClickeEvent

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von RoulettePilot.

    Panel mit Label verbinden bzw. bei beiden gleiches ClickeEvent

    Hallo,

    Wie schon im titel erklärt möchte ich Labels mit einem Panel verbinden.

    Das heißt ich habe ein Panel als hintergrund wenn man auf diesen klickt passiert etwas doch wenn ich nun eine beschreibung in Form eines Labels darüberlege muss ich den Code bei allen Labels also nochmal aufrufen.

    Kann man somit Labels mit den Panel verbinden das eben bei einem Klick aufm Label oder Panel immer das gleiche passiert?


    Natürlich geht es mit mehreren ClickEvents also jedes Label im Code ansprechen und dann evt. auf ein Unterprogramm verweisen doch geht es noch anders?
    Da ich ungefähr pro Panel 8-10 Labels darüber habe möchte ich nicht jedes einzelne Label ansprechen.

    Leider hab ich soetwas in der art noch nie versucht und wüsste nun auf die schnelle keine gute Lösung.


    Aber vll. gibt es da ja etwas schönes :)
    Danke schonmal.

    MFG Gorlo
    wo dein Programmcode für das Handle für das Panels steht, steht am Ende was von "handles panel1.Click"
    erweitere dies einfach z.B. ( durch Komma getrennt)
    handles panel1.Click , handles label1.Click, handles label2.Click .... usw.

    bei fester anzahl 8-10 wie du sagst sollte das reichen, ansonsten kannst du auch per Code "addhandler" aufrufen, und diesen auf dein PanelEventcode legen.
    Ich würde mit AddHandler arbeiten, da du so nicht vergessen kannst, ein neues Label in die Handler-Liste aufzunehmen.
    z.B. so

    VB.NET-Quellcode

    1. Private Sub Panel1_Paint(sender As Object, e As PaintEventArgs) Handles Panel1.Paint
    2. For Each ctrl As Control In CType(sender, Panel).Controls
    3. If TypeOf ctrlIs Label Then
    4. AddHandler ctrl.Click, AddressOf Panel_Click
    5. End If
    6. Next
    7. End Sub
    8. Private Sub Panel_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Panel1.Click
    9. MessageBox.Show("Panel angeklickt")
    10. End Sub
    ich würde nicht das Paint-Event nehmen, (dies wird a immer wieder aufgerufen), sondern bei ContolAdded-
    theoretisch (nicht getesetet) so...

    VB.NET-Quellcode

    1. Private Sub Panel1_ControlAdded(sender As Object, e As System.Windows.Forms.ControlEventArgs) Handles Panel1.ControlAdded
    2. If TypeOf e.Control Is Label Then
    3. AddHandler CType(e.Control, Label).Click, AddressOf Panel1_Click
    4. End If
    5. End Sub
    Ok klappt(habs mit Paint event nun gelöst wann wird es denn immer erneut ausgeführt doch nur wenn es erscheint da ich meine Form aber nicht reloade oder erneut aufrufe sonder immer daruaf bleibe müsste es doch so klappen oder nicht?). Naja aufjedenfall Danke dafür :)

    Nun eine frage am rande kann man irgentwo einstellen das wenn man in der Form Doppelklick auf ein Panel macht das man im code dann nicht zu Panel_paint hinkommt sondern zum ClickEvent vom Panel.

    Das frag ich mich schon länger wäre echt hilfreich :)

    MFG Gorlo

    Gorlo schrieb:

    Nun eine frage am rande kann man irgentwo einstellen das wenn man in der Form Doppelklick auf ein Panel macht das man im code dann nicht zu Panel_paint hinkommt sondern zum ClickEvent vom Panel.


    musste erst 3x mal lesen bis ich begriff *g*
    sobald du auf ein Control klickst kommst du auf das Standard-Event... welches beim Panel das "Paint" ist.

    Da hilft nichts, da musst du dann rechts oben das richtige auswählen.
    Natürlich kannst du ein eigenes Panel mit entsprechendem Standard Event machen, aber das wäre die Mühe nicht wert.
    Meist ist es ja das richtige.. z.B. Button Click... usw.

    Also... Augen zu und Durch :)
    Ok vielen dank dafür schonmal :D

    Nun fällt mir aber erst mein größtes problem auf.

    Hatte vorher auch einige PictureBoxen statt Panels drinne das war natürlich nicht soo schön nun habe ich diese ausgetauscht.

    Aus dem grund kam es nun zu einem komischen problem denn wenn ich nun das Panel Disable wird die Schriftfarbe der Label umgeändert, da ich diese eig. auf weiß habe ist ein Dunkles grau auch für Disabled nich passend, da man die Labels leider so kaum noch lesen kann.

    Somit meine frage ich denke mal davon ausschließen sie zu Disablen ist schwerer aber kann man irgentwo in den Eigenschaften die Schriftfarbe für Disabled einstellen? Ich habe gerade etwas gesucht aber nichts gefunden :/
    (Hätte ich das kleine problem einfach mal auf sich ruhen gelassen :D)

    Wenn das noch mehr problem mit sich bringt werde ich eh wieder das Backup nutzen :)

    Trotzdem danke bis hierhin

    MFG Gorlo
    da kannste erstmal nichts machen.
    Ist ein ContainerControl disabled sind es auch die innenliegenden Controls, was ja auch Sinn macht.

    Eine Möglichkeit wäre, es nicht zu disablen, sondern ein Flag zu setzen (eine Varialbe die aussagt ob das Panel enabled/disabled) ist, und im KlickEvent dieses Flag abfragen.
    Ist es gesetzt (also das Panel "disabled" dann nichts machen ansonsten den Code ausführen.

    oder eines noch...
    Positioniere die Labels ÜBER den Panel, ohne das sie in diesem drinnen sind.
    So das es nach Aussenhin nur so aussieht, als wären sie in dem Panel.
    (dann klappt aber "controlAdded" nicht mehr)

    Ok kein problem habe nun auch kein lust da weiter dran rumzubasteln da es wirklich nur ein kleiner "fehler" war. man hatte genug fläche auf dem Panel wo man klicken konnte...

    Nun hab ich die farbe des Panels so angepasst das ich keine weiße schrift verwenden muss sondern einfach die Standart schwarze Farbe nehmen kann :)

    Ein Flag wäre nicht soo toll da ich schon einige zeilen an code zusammen habe und ich es dann zu oft bräuchte...

    Nun klappt alles soweit wie ich es wollte nun Programmiere ich mal weiter :D

    Danke an euch beiden :)

    MFG Gorlo
    Ok habe einen weiteren fehler der damit zusammenhängt.

    Wenn ich nur knapp auf ein label klicke oder direkt bei einem Buchstaben wird das Click Event mehrfach ausgeführt.

    D.h. ich habe ein Click event was bei einem ersten klick darauf einen button sichtbar macht und beim zweiten wieder unsichtbar und immer so weiter... als Beispiel

    Nun ist es soo das wenn man auf das label klickt das click event vom label und vom panel oder wie auch immer ausgeführt wird. Aufjedenfall wird es mehrmals aufgeführt und deswegen bleibt der Button unsichtbar auch wenn man auf das Panel klickt oder wird nu sehr sher kurz sichtbar aber sofort wieder unsichtbar als wenn man zweimal klickt.

    Hoffe ihr könnt mir helfen.

    MFG Gorlo
    wenn du denn ADD-Handler im PaintEvent hinzugefügt hast (wie bei Posting 3) ist dies kein Wunder, da bei jedem Paint ein neuer (zusätzlicher!!!) Handler hinzugefügt und damit später auch ausgeführt wird.

    er MUSS im Controll-Added stehen, oder irgendwo im Code, der nur EINMAL ausgeführt wird.

    Gorlo schrieb:

    Aber vll. gibt es da ja etwas schönes
    Icgh denke mal, Du schießt mit Kanonen auf Spatzen.
    Sieh Dir mal dies an:

    VB.NET-Quellcode

    1. Private Sub Label1_Click(sender As System.Object, e As System.EventArgs) Handles Label1.Click, Label2.Click, Label3.Click, Label4.Click, Label5.Click, Label6.Click
    2. Dim lbl As Label = DirectCast(sender, Label)
    3. lbl.Text = lbl.Name.ToUpper
    4. If sender Is Label3 Then
    5. lbl.Text = lbl.Name.ToLower
    6. End If
    7. 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!

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