Evennement onClick sur tou mon control [Résolu]

Messages postés
10
Date d'inscription
dimanche 11 février 2007
Dernière intervention
14 juillet 2010
- - Dernière réponse : cs_Robert33
Messages postés
835
Date d'inscription
samedi 15 novembre 2008
Dernière intervention
14 janvier 2017
- 14 juil. 2010 à 10:23
Comment ajouter un evennement onClick sur toute une controle par exemple:
Mon controle contient des labels et un picturebox
je veut que quand je clique sur n'importe quel partie une fenetre s'ouvre
je veut pas cliquer entres les labels par exemple pour declancher l'evennement
Merci d'avance et desoler pour mes faute d'hortographe
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
Messages postés
835
Date d'inscription
samedi 15 novembre 2008
Dernière intervention
14 janvier 2017
23
3
Merci
Bonjour

Il n'y a pas, à ma connaissance, de méthode toute faite.
mais 2 possibilités:

- faire une boucle (foreach) sur la collection de control et positioner l'evenement OnClick
        
public Form()
{
 	InitializeComponent();
foreach (Control c in Controls)
{
c.Click += new EventHandler(c_Click);
}
}
void c_Click(object sender, EventArgs e)
{
throw new NotImplementedException();
}


- Eviter d'tutiliser des controles et dessiner toi-même les informations directement sur le fond de ton control, en surchargeant la méthode OnPaint.



C# is amazing, enjoy it!

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 120 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Robert33
Messages postés
10
Date d'inscription
dimanche 11 février 2007
Dernière intervention
14 juillet 2010
3
Merci
Merci Beaucoup :)
""""- Eviter d'tutiliser des controles et dessiner toi-même les informations directement sur le fond de ton control, en surchargeant la méthode OnPaint. """"

Tu peut m'expliquer un peut cet phrase ? Merci d'avance juste un peut d'explication ou un petit exemple svp
merciiiiii Robert33

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 120 internautes nous ont dit merci ce mois-ci

Commenter la réponse de jabbour0000
Messages postés
835
Date d'inscription
samedi 15 novembre 2008
Dernière intervention
14 janvier 2017
23
3
Merci
Bonjour,

en effet je n'ai pas été très clair, dsl.

Si tu ne veux pas avoir d'evenement click sur les controles c'est qu'ils sont en affichage seulement (pas de modification par l'utilisateur), donc le plus simple est de les déssiner toi même sur le fond du user control, ainsi le click se produira sur le user control.

dans l'example suivant, j'ai créé un user control avec 2 labels et un picture box pour lesquels je veux que les click arrivent sur le user control lui-même

l'idée est donc de cacher ces 2 labels et le picturebox (ainsi pas de click) et de les redessiner dans la méthod de l'évenement Paint
On pourrait dessiner les controles directement, sans avoir à les creer dans le designer, mais on serait en aveugle en design.
Biensur le user control peut posseder d'autres controles "normaux".

//changement du texte du label 1 depuis l'exterieur
public string Text1
{
get { return label1.Text; }
set { label1.Text = value; Invalidate(); }
}
public UserControl1()
{
InitializeComponent();
Paint += new PaintEventHandler(UserControl1_Paint);
Click += new EventHandler(UserControl1_Click);

//on cache tous les controls pour lesquels on ne veut pas d'évenement click
pictureBox1.Visible = false;
label1.Visible = false;
label2.Visible = false;
}

private void UserControl1_Click(object sender, EventArgs e)
{
//Click sur le user controle, ou sur un des controles cachés
}

private void UserControl1_Paint(object sender, PaintEventArgs e)
{
// on redéssine les controles cachés

// on en profite pour mettre un joli fond
LinearGradientBrush myLinearGradientBrush =  new LinearGradientBrush(ClientRectangle,Color.AliceBlue,Color.CornflowerBlue,0.0);
e.Graphics.FillRectangle(myLinearGradientBrush, ClientRectangle);

//on utilise les propriété des controles, pour rendre plus facile le design
e.Graphics.DrawString(label1.Text, label1.Font, Brushes.Black, label1.Location);
e.Graphics.DrawString(label2.Text, label2.Font, Brushes.Black, label2.Location);

RectangleF sourceRect = new RectangleF(0,0, pictureBox1.Image.Width,pictureBox1.Image.Height );
RectangleF destRect = new RectangleF(pictureBox1.Location, pictureBox1.Size);
e.Graphics.DrawImage(pictureBox1.Image,destRect, sourceRect, GraphicsUnit.Pixel);

}


bon code
Bob
C# is amazing, enjoy it!

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 120 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Robert33
Messages postés
10
Date d'inscription
dimanche 11 février 2007
Dernière intervention
14 juillet 2010
3
Merci
Merveilleuse reponse.
Merci Robert33 tu metone la

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 120 internautes nous ont dit merci ce mois-ci

Commenter la réponse de jabbour0000
Messages postés
835
Date d'inscription
samedi 15 novembre 2008
Dernière intervention
14 janvier 2017
23
0
Merci
merci,

mais ce n'était pas compliqué...

Bob
C# is amazing, enjoy it!
Commenter la réponse de cs_Robert33

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.