Click sur un UsercControl

Résolu
xmox667 Messages postés 357 Date d'inscription jeudi 8 juin 2006 Statut Membre Dernière intervention 26 décembre 2011 - 21 oct. 2008 à 16:36
xmox667 Messages postés 357 Date d'inscription jeudi 8 juin 2006 Statut Membre Dernière intervention 26 décembre 2011 - 22 oct. 2008 à 13:08
Salut à tous,
J'ai un un UserControl dont l'événement Click est définit et qui contient d'autres contrôles.
J'aimerais que l'événement Click se déclenche même si je clique sur un de ses contrôles enfants.
Merci

7 réponses

leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
21 oct. 2008 à 17:58
Dans ton user control :

public event EventArgs UserControlClicked
{
add
{
this.Click += value;
firstControl.Click += value;
secondControl.Click += value;
}
remove
{
this.Click -= value;
firstControl.Click -= value;
secondControl.Click -= value;
}
}

Les objets utilsiant ton user control n'ont plus qu'a sabonner a ton evenement UserControlClicked.
tu peux aussi faire ca en bouclant :
add
{
this.Click += value;
foreach (Control c in this.Controls)
{
c.Click += value;
}
}

ensuite cest transparent pour ceux qui s'abonnent
3
WishhhMaster Messages postés 327 Date d'inscription mardi 17 février 2004 Statut Membre Dernière intervention 10 avril 2010 8
21 oct. 2008 à 21:56
Salut,

je ne sais pas si ca marcherait, mais tu pourrais aussi t'abonner a l'evenement ControlAdded de ton User control.
Et la, tu t'abonnes a l'evenement click du control

private void UserControl_ControlAdded(object sender, ControlEventArgs e)
        {
            e.Control.Click+= new EventHandler(Control_Click);
        }

L'avantage est que ca marche meme si tu ajoutes des controls dynamiquement.
C'est juste une idee, pas testee.
3
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
21 oct. 2008 à 23:30
Je propose quelque chose dans ce style:


using System;

using System.Windows.Forms;

namespace Bidou
{
  
public
class
ContainerLevelMouseEventsMessageFilter :
IMessageFilter
   {
     
private
const
int WM_LBUTTONDOWN = 0x0201;
     
private
Control _container =
null;
     
public
event
MouseEventHandler MouseClick =
null;

     
public ContainerLevelMouseEventsMessageFilter(
Control container)
      {
        
if (container ==
null)
throw
new
ArgumentNullException(
"container is null");
        
this._container = container;
        
this._container.Disposed +=
new
EventHandler(
this.container_Disposed);
      }

     
protected
virtual
void OnMouseClick(
MouseButtons mouseB,
int nbClick,
int x,
int y,
int delta)
     {
        
MouseEventArgs e =
new
MouseEventArgs(mouseB, nbClick, x, y, delta);
        
if (
this.MouseClick !=
null)
this.MouseClick(
this._container, e);
      }

     
public
bool PreFilterMessage(
ref
Message m)
      {
        
if (m.Msg == WM_LBUTTONDOWN)
        {
           
Control ctrl =
Control.FromHandle(m.HWnd);
            if (ctrl !null && (ctrl
this._container ||
this._container.Contains(ctrl)))
           {
              
this.OnMouseClick(
MouseButtons.Left, 1, 10, 10, 10);
// Récuprer les vraies valeurs...
               return
true;
            }
        }
       
return
false;
      }

   
private
void container_Disposed(
object sender,
EventArgs e)
    {
        t
ry
        {
           
this._container =
null;
          
Application.RemoveMessageFilter(
this);
        }
       
catch { }
     }
  }
}


<hr />
-My Blog-
3
vaughan Messages postés 198 Date d'inscription mardi 6 août 2002 Statut Membre Dernière intervention 29 octobre 2008
21 oct. 2008 à 16:58
Pour chaque UserControl il existe un objet Parent.

Il te suffit de faire this.Parent.Click(Avec tes paramètres)

vaughan
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
xmox667 Messages postés 357 Date d'inscription jeudi 8 juin 2006 Statut Membre Dernière intervention 26 décembre 2011 4
21 oct. 2008 à 17:24
Salut,
Justement j'aimerai éviter de définir la méthode Click de chaque contrôle enfant.
A+
 
0
xmox667 Messages postés 357 Date d'inscription jeudi 8 juin 2006 Statut Membre Dernière intervention 26 décembre 2011 4
21 oct. 2008 à 18:33
Salut


[../auteur/LEPROV/311556.aspx leprov],
C'est la première que je vois cette syntaxe avec les mot clé add/remove.
Peut tu m'expliquer un peu plus ton code car je ne l'ai pas bien compris.
Merci
0
xmox667 Messages postés 357 Date d'inscription jeudi 8 juin 2006 Statut Membre Dernière intervention 26 décembre 2011 4
22 oct. 2008 à 13:08
Salut,
J'ai compilé les réponses et ça fonctionne.
Merci à tous
0
Rejoignez-nous