2017-07-22 1 views
-1

Ich versuche, einen Ereignishandler für mein Benutzersteuerelement zu implementieren, das einen Klick auslöst, sobald ein Steuerelement in dem Benutzersteuerelement oder dem Benutzersteuerelement selbst geklickt wird.Klick Ereignisse aller Steuerelemente von UserControl an einzelnes Ereignis auf übergeordnete Steuerelement binden

public event EventHandler ClickCard 
{ 
    add 
    { 
     base.Click += value; 
     foreach (Control control in GetAll(this, typeof(Control))) 
     { 
      control.Click += value; 
     } 
    } 
    remove 
    { 
     base.Click -= value; 
     foreach (Control control in GetAll(this, typeof(Control))) 
     { 
      control.Click -= value; 
     } 
    } 
} 
public IEnumerable<Control> GetAll(Control control, Type type) 
{ 
    var controls = control.Controls.Cast<Control>(); 

    return controls.SelectMany(ctrl => GetAll(ctrl, type)) 
             .Concat(controls) 
             .Where(c => c.GetType() == type); 
} 

I modifiziert, um den Code here gegeben alle verschachtelten Kontrollen zu binden. Dies ist, wie ich die Veranstaltung bin verbindlich, auf denen diese Benutzersteuerung verwendet wird:

private void feedbackCard1_ClickCard_1(object sender, EventArgs e) 
{ 
    MessageBox.Show("Thank You!"); 
} 

Aber der Klick Brennen nicht auf sich selbst eines der Steuerelemente in der Benutzersteuerung oder der Benutzersteuerung klicken.

+0

schließen Abstimmung ohne Erklärung. Warum? Bitte erkläre. –

Antwort

0

Okay, habe ich herausgefunden eine andere Art und Weise, dies zu tun:

Action clickAction; 
public Action CardClickAction 
{ 
    get 
    { 
     return clickAction; 
    } 
    set 
    { 
     Action x; 
     if (value == null) 
     { 
      x =() => { }; 
     } 
     else 
      x = value; 
     clickAction = x; 
     pictureBox1.Click += new EventHandler((object sender, EventArgs e) => 
     { 
      x(); 
     }); 
     label2.Click+= new EventHandler((object sender, EventArgs e) => 
     { 
      x(); 
     }); 
     tableLayoutPanel3.Click += new EventHandler((object sender, EventArgs e) => 
       { 
      x(); 
     }); 
    } 
} 

Jetzt können wir CardClickAction Eigenschaft auf den Formularen verwenden, der diese Benutzersteuerung wie folgt verwenden:

Card1.CardClickAction = new Action(() => 
{ 
    //your code to execute when user control is clicked 
}); 
Verwandte Themen