C#: chiamata di un pulsante metodo del gestore di eventi senza effettivamente facendo clic sul pulsante

Ho un pulsante nel mio file aspx chiamato btnTest. L’ .cs file è una funzione che viene chiamata quando il pulsante viene cliccato.

btnTest_Click(object sender, EventArgs e)

Come posso chiamare questa funzione all’interno del mio codice, vale a dire senza in realtà cliccando sul pulsante)?

InformationsquelleAutor xbonez | 2010-03-05

 

13 Replies
  1. 29
    btnTest_Click(null, null);

    A condizione che il metodo non utilizza uno di questi parametri (è molto comune, non a.)

    Per essere onesti questo è icky. Se si dispone di codice che deve essere chiamato è necessario seguire la seguente convenzione:

    protected void btnTest_Click(object sender, EventArgs e)
    {
       SomeSub();
    }
    
    protected void SomeOtherFunctionThatNeedsToCallTheCode()
    {
       SomeSub();
    }
    
    protected void SomeSub()
    {
       //...
    }
    • -1, troppo codice.
    • No. Non troppo codice. Non si deve usare un metodo sia per una chiamata e un evento. E ‘ fuorviante e fonte di confusione.
    • E che fare con la gestione delle eccezioni? In tutti e tre i metodi? Perché creare metodi per chiamare un metodo unico? Non creare confusione. Buttton_Click(null, null), è ovvio. SomeOtherFunctionThatNeedsToCallthecode non ha senso per me.
    • Stavo usando quel nome di funzione come un esempio. Avrei potuto facilmente mettere foo() invece.
    • Quanto riguarda la gestione delle eccezioni che dipende da un sacco di fattori che vanno ben oltre lo scopo di questa domanda.
    • Non fare la differenza, quello che voi chiamate questi altri metodi. Aggiungendo il codice aggiuntivo, sai che devi pensare, gestire e gestire eventuali errori di codice aggiuntivo in grado di produrre. Si tratta di un semplice metodo di chiamata, e il nome del metodo è quasi auto-documentante.
    • No non è auto-documentato. Questo è il punto. Se btnTest_Click è sparata a volte quando btnTest non è stato cliccato che fuorviante. Periodo.
    • Sapete btnTest_Click non è licenziato perché il mittente non è il pulsante o è null. Questo è lo scopo del mittente. Il mio punto è che la gente scrivere troppo codice. Questo non è un evento click del pulsante. È solo una semplice chiamata al metodo.
    • “Periodo?” Si tratta solo di una discussione, non un argomento.
    • “quasi auto-documentazione”. L’aggiunta di un commento come “chiamata di metodo per evitare la creazione di metodi” va un lungo cammino.
    • Non c’è discussione. Avendo btnTest_Click eseguire quando btnTest non è stato cliccato è fuorviante.
    • Sistema.Windows.Le forme.Il pulsante.PerformClick()
    • Ogni lingua è in grado di fare ogni sorta di cose brutte. Non significa che si dovrebbe. 🙂
    • Raccordo con Spencer qui, SomeSub è una separazione di preoccupazioni. Spencer non è sostenendo che chiamando SomeSub, ma probabilmente più HandleUserLogin. È molto più evidente di manutenzione agli sviluppatori di vedere: HandleUserLogin (); di btnLogin_Click (null, null), soprattutto se btnLogin_Click non si limita a gestire il login dell’utente!
    • “Il mio punto è che la gente scrivere troppo codice”. Meno codice non è sempre meglio. In questo caso sono d’accordo con @SpencerRuport.

  2. 18

    Utilizzare

    btnTest_Click( this, new EventArgs() );
    • EventArgs.Empty?
    • EventArgs.Il vuoto è statico di nuovo EventArgs(). Quindi, EventArgs.Il vuoto è più appropriato, ma la creazione di nuovi è quasi buono.
  3. 6

    Tutti i metodi di cui sopra non sono buone, perché si potrebbe modificare evento nome della funzione. Il modo più semplice è:

    btnTest.PerfromClick();
  4. 5

    È possibile utilizzare la reflection per Richiamare il OnClick metodo che verrà generato l’evento click gestori.

    Mi sento sporco questo distacco, ma funziona…

    MethodInfo clickMethodInfo = typeof(Button).GetMethod("OnClick", BindingFlags.NonPublic | BindingFlags.Instance);
    
    clickMethodInfo.Invoke(buttonToInvoke, new object[] { EventArgs.Empty });
  5. 4

    Se il metodo non è utilizzando sender o e si potrebbe chiamata:

    btnTest_Click(null, null);

    Quello che probabilmente dovrebbe prendere in considerazione fare è estrarre il codice all’interno del metodo, in un suo metodo, che si potrebbe chiamare sia il pulsante fare clic su gestore di eventi, e qualsiasi altro luogo in codice che la funzionalità è necessaria.

  6. 2

    È solo un metodo sul modulo, si può chiamare come qualsiasi altro metodo. Basta creare un EventArgs oggetto per passare ad esso, (e passare l’handle del pulsante sender)

  7. 2

    Semplicemente chiamare:

    btnTest_Click(null, null);

    Solo assicurarsi che non sta cercando di utilizzare uno di questi parametri in funzione.

  8. 1

    All’interno del primo evento di pulsante di chiamata secondo pulsante(imagebutton) evento:

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

    è possibile utilizzare il pulsante di stato, come l’imagebutton il commandArgument se si salva qualcosa in esso.

  9. 0

    btnTest_Click(new object(), EventArgs.Vuoto)

    • il passaggio di un oggetto generico sembra una cattiva idea. meglio passare il pulsante o null.
    • Perché ti senti così?
    • perché il mittente è normalmente il controllo, quindi, se il gestore di fare clic su usa a tutti, si aspetta che sender as Control di lavoro.
    • (sender as Control) restituisce null se si passa in un Oggetto, in modo che l’argomento non funziona. Il mio contatore argomento è che passando null, rompere il codice che utilizza (sender.GetType) per verificare il tipo.
    • Io di solito uso this come parametro mittente…
  10. 0

    È possibile chiamare il btnTest_Click proprio come qualsiasi altra funzione.

    La forma più semplice sarebbe questo:

    btnTest_Click(this, null);
  11. 0
    btnSubmit_Click(btnSubmit,EventArgs.Empty);
    • Mentre questo potrebbe rispondere gli autori domanda, manca qualche spiegazione di parole e/o collegamenti alla documentazione. Raw frammenti di codice non sono molto utili senza alcune frasi intorno a loro. È inoltre possibile trovare come scrivere una buona risposta molto utile. Si prega di modificare la tua risposta – Da Rivedere
  12. 0

    Devi passare il parametro sender e e per pulsante di chiamata del gestore di evento .cs file

    btnTest_Click(sender,e);

Lascia un commento