Je n'ai rien trouvé (mais j'ai peut être mal cherché) pouvant répondre alors je pose ma question.
Existe-t-il une solution pour programmer un envoi tel que "Bouton1 on vient de te cliquer dessus" ?
Je n'ai rien trouvé (mais j'ai peut être mal cherché) pouvant répondre alors je pose ma question.
Existe-t-il une solution pour programmer un envoi tel que "Bouton1 on vient de te cliquer dessus" ?
salut,
une manière simple pour ça est d'appeler une fonction lors du clic sur le bouton1 ou lorsque tu veux faire le même traitement que si tu cliquais dessus.
Et t'appelles maFonction qd tu veux simuler le clic sur le bouton
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 sub maFonction -- code pour gérer le clic sur le bouton ........... end sub Private Sub Bouton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Bouton1.Click maFonction() End sub
Pour VB.NetRaiseEvent, instruction
RaiseEvent ne permet de lever que des événements de la classe courante, dans mon cas le formulaire donc avec RaiseEvent je ne peux lever que des Load, Closed, GotFocus, etc du formulaire. RaiseEvent ne permet pas de lever un événement sur un objet membre de la classe.
La fonction contenant le code du clic c'est bien, mais le problème c'est que Bouton1 est un contrôle personnalisé externe au formulaire contenant déjà son propre handler sur le click.
Donc à part modifier le contrôle (je préfère préciser que ce n'est pas moi qui l'ait fait) il n'y a pas d'autre solution envisageable ?
Ben déjà va falloir que tu m'explique pourquoi déclencher un Click par code. Je ne connais pas la conception de ta solution mais tu avouras que là ya un souci non
:
S'il n'y a pas eu de Click Utilisateur encore une fois pourquoi passer par son déclenchement:
Un clic sur un contrôle change son état (qui dépend de son état précédent), avec tout un tas de traitement interne derrière, et lève un autre événement (indiquant le changement d'état) qui lui est intercepté par mon formulaire. Le changement d'état d'un contrôle produit un affichage dans le formulaire cumulable avec celui généré par les autres contrôles.Envoyé par neguib
Le but c'est d'exécuter l'affichage dans le formulaire mais les actions se font en flux poussé depuis le contrôle donc en éxécutant dans le formulaire directement je perd la synchronisation avec le contrôle.
La raison de le faire par code c'est pour éxécuter des actions de masse, déclenchées par l'utilisateur. Pour ces actions de masse, le "choix" des contrôles à cliquer est assimilable à une requête sur les données contenues dans les contrôles, dont les critères sont dépendants de l'utilisateur. Il est aisé de connaître les contrôles affectés et de produire les affichages dans le formulaire mais il est actuellement impossible de déclencher la suite d'actions générée par un contrôle sans cliquer dessus.
salut
je ne c pas si ça va marcher ou non, je n'ai jamais eu affaire à un problème pareil, mais si tu passes ton bouton en paramètre dans le constructeur de ta classe et que tu le mets comme attribut, si tu fais un raiseevent là dessus ça ne résoud pas le problème ?
-->Envoyé par Mourad
Envoyé par Franckintosh
![]()
re
je crois avoir trouvé la solution à ton problème
ben tu fais comme je t'ai dis tt à l'heure:
- tu déclares un bouton BTN comme attribut dans ta forme
- tu passes le bouton en paramètre dans le constructeur de ta forme que tu affectes par la suite au BTN
-lorsque tu veux lancer l'évenèment clique du bouton tu appelles la méthode :
et le tour est joué
Code : Sélectionner tout - Visualiser dans une fenêtre à part BTN.PerformClick()![]()
Sinon connais-tu tout de même le code du composant ? notamment sur l'evenement click, je soupçonne que la méthode correspondante contienne tout le code nécessaire à la suite alors qu'il est preferable simplement de faire un appel de méthode qui serait rendu publique et donc atteignable egalement par programmation
Une autre voie est que le concepteur ait pensé à faire une méthode OnClick protégée qui déclenche l'evenement OnClick en envoyant un EventArgs, dans ce cas utilises simplement qu'un dérivé de ce composant pour avoir accès au OnClick
![]()
Mon contrôle n'est pas un bouton au sens .Net (implémentation de IButtonControl ou dérivé de Button) donc je n'ai pas accès à PerformClick.
J'ai accès au code, j'en ai même hérité la maintenance, mais modifier un composant stable et qui fonctionne correctement est la dernière option à envisager (surtout quant il est utilisé dans beaucoup d'endroits), même s'il a besoin d'une bonne refonte pour être aussi souple que ceux du framework (le concepteur il a pensé à rien du tout).
Grâce à vos suggestions (merci :-)) je suis aller fouiller dans des zones auxquelles je n'avais pas pensées, et y ai trouvé la méthode protégée InvokeOnClick dans System.Windows.Forms.Control qui permet d'émuler un clic sur un contrôle passé en argument, un Form étant un dérivé de Control ça va tout bien. Le truc plutôt vicieux c'est qu'elle n'apparaît pas dans l'aide à la saisie (de Visual Studio) pour les objets dérivés de Control.
Partager