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)?
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()
{
// ...
}
Utilisation
btnTest_Click( this, new EventArgs() );
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();
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 });
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.
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
)
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.
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.
btnSubmit_Click(btnSubmit,EventArgs.Empty);
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);
btnTest_Click (nouvel objet (), EventArgs.Empty)
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);