web-dev-qa-db-fra.com

C #: appel d'une méthode de gestionnaire d'événement de bouton sans cliquer sur le bouton

J'ai un bouton dans mon fichier aspx appelé btnTest. Le fichier .cs a une fonction appelée lorsque le bouton est cliqué.

btnTest_Click(object sender, EventArgs e)

Comment puis-je appeler cette fonction à partir de mon code (c'est-à-dire sans cliquer sur le bouton)?

20
xbonez
btnTest_Click(null, null);

À condition que la méthode n'utilise aucun de ces paramètres (il est très courant de ne pas le faire.)

Pour être honnête, c'est dégueulasse. Si vous avez un code qui doit être appelé, vous devez suivre la convention suivante:

protected void btnTest_Click(object sender, EventArgs e)
{
   SomeSub();
}

protected void SomeOtherFunctionThatNeedsToCallTheCode()
{
   SomeSub();
}

protected void SomeSub()
{
   // ...
}
29
Spencer Ruport

Utilisation

btnTest_Click( this, new EventArgs() );
18
JDMX

Toutes les méthodes ci-dessus ne sont pas bonnes car vous pourriez changer le nom de la fonction d'événement. Le plus simple est:

btnTest.PerfromClick();
6
majkinetor

Vous pouvez utiliser la réflexion pour invoquer la méthode OnClick qui activera les gestionnaires d’événements click.

Je me sens sale en postant ça mais ça marche ...

MethodInfo clickMethodInfo = typeof(Button).GetMethod("OnClick", BindingFlags.NonPublic | BindingFlags.Instance);

clickMethodInfo.Invoke(buttonToInvoke, new object[] { EventArgs.Empty });
5
ywm

Si la méthode n'utilise pas sender ou e, vous pouvez appeler:

btnTest_Click(null, null);

Vous devriez probablement envisager d'extraire le code de cette méthode dans sa propre méthode, que vous pouvez appeler à partir du gestionnaire d'événements de clic de bouton et de tout autre endroit du code dans lequel la fonctionnalité est requise.

4
Wayne Cornish

C'est juste une méthode sur votre formulaire, vous pouvez l'appeler comme n'importe quelle autre méthode. Il vous suffit de créer un objet EventArgs pour le lui transmettre (et lui transmettre le handle du bouton sous la forme sender)

2
John Knoeller

Appelez simplement:

btnTest_Click(null, null);

Assurez-vous simplement que vous n'essayez pas d'utiliser l'un de ces paramètres dans la fonction.

2
Aaron

Dans l'événement du premier bouton, appelez l'événement du deuxième bouton (imagebutton):

imagebutton_Click((ImageButton)this.divXXX.FindControl("imagbutton"), EventArgs.Empty);

vous pouvez utiliser l'état du bouton tel que l'argument de commande de imagebutton si vous enregistrez quelque chose.

1
Amy
btnSubmit_Click(btnSubmit,EventArgs.Empty);
0
Rijwan

Vous devez passer les paramètres sender et e pour appeler le gestionnaire d'événements de bouton dans un fichier .cs

btnTest_Click(sender,e);
0
user8972244

btnTest_Click (nouvel objet (), EventArgs.Empty)

0
Jonathan Allen

Vous pouvez appeler le btnTest_Click comme n'importe quelle autre fonction.

La forme la plus élémentaire serait la suivante:

btnTest_Click(this, null);
0
NebuSoft