UserControl aus mehreren Controls .Click-Event irgendwo im UserControl abfangen

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von Jada.

    UserControl aus mehreren Controls .Click-Event irgendwo im UserControl abfangen

    Hallo Zusammen,

    ich wollte mal fragen, ob jemand eine Möglichkeit weiss, wie ich bei einem UserControl welches aus mehreren Controls besteht ein Click Event welches irgendwo innerhalb dieses UserControls erzeugt wird (also egal auf welchem der Controls aus denden das UC besteht) abfangen kann, oder ob ich jedes einzelne Control in der Handles Klausel einzeln aufführen muss?

    Oder gibt es einen Trick, z.B. Ein Panel drüber legen und das abfragen oder so in der Art.

    Wie macht man so etwas sauber?

    Grüßle
    man kann mit einer Schleife alle Controls durchnudeln, und die Events auf einen EventHandler leiten.
    Man kann auch in der Handles-Klausel alle zu überwachenden Controls ausdrücklich aufführen - ist ja unwahrscheinlich, dass wirklich unterschiedslos alle Controls überwacht werden sollen.
    Es handelt sich konkret in diesem Fall um ein TableLayoutPanel (mit ca. 10 Labels und zwei Panels), welches in ein Panel eingebettet ist.
    Das ganze Zeigt eine Instanz einer Klasse in einer Übersicht (darin sind dann mehere von den UCs). Wenn man es anklickt, dann soll man halt in die Form kommen, in der man die Instanz editieren kann.

    Die Schleife klingt interessant, aber wo soll ich die hinstecken, das Click Event wirkt ja nur für ein Control, nur dann muss ich ja wieder alle in der Handles Klausel angeben und die Schleife wird obsolet.

    ?!?!

    ich denke mal Du meinst es in der Art hier:

    VB.NET-Quellcode

    1. Private Sub UCWochenübersichtEinsatz_Load(sender As Object, e As EventArgs) Handles Me.Load
    2. For Each c In Me.Controls
    3. AddHandler c.Click, AddressOf meClick
    4. Next
    5. End Sub
    6. Private Sub meClick(sender As Object, e As EventArgs)
    7. 'mach was
    8. End Sub


    das geht aber nicht, weil er das .Click nicht als Ereignes von c kennt

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

    Jada schrieb:

    das geht aber nicht, weil er das .Click nicht als Ereignes von c kennt


    jetzt habe ich glaube ich meinen Beitrag genau in dem moment editiert, als Du geantwortet hast

    VB.NET-Quellcode

    1. For Each c In Me.Controls
    2. If TypeOf c Is Label Then
    3. AddHandler DirectCast(c, Label).Click, AddressOf meClick
    4. ElseIf TypeOf c Is Panel Then
    5. AddHandler DirectCast(c, Panel).Click, AddressOf meClick
    6. End If
    7. Next


    so geht es aber irgendwie sieht es nicht 'gut' aus

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

    Das Ereignis .Click ist jedem Control bekannt, das von Control erbt. Schau mal genau die Fehlermeldung an, die Du bekommst...

    Fehler 1 "Click" ist kein Ereignis von "Object".


    Das ist auch vollkommen richtig, denn

    VB.NET-Quellcode

    1. Private Sub UserControl1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. For Each c As Control In Me.Controls
    3. AddHandler c.Click, AddressOf AnyControl_Click
    4. Next
    5. End Sub


    macht hier den kleinen aber wichtigen Unterschied. Schau mal genau.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Und warum nicht so:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click, Button2.Click, Button3.Click ' ...
    2. 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!