4 Stimmen

C# Objekt Absender - Ermitteln der Methode, von der es aufgerufen wurde

Ich habe diese Methoden:

    private void button_Click(object sender, EventArgs e)
    {
          //Changes the Text in the RichBox, EXAMPLE:
          richtTextBox.Text = "Now Changed and calling Method richTextBox_TextChanged";
    }

Und,

 private void richTextBox_TextChanged(object sender, EventArgs e)
 {
         //Wants something like that
         if(called from button_click)
         {
           //DO SOMETHING
         }
         else
         {
           //DO SOMETHING
         }
 }

Wie kann ich dies handhaben, um zu wissen, ob es vom Button_click aufgerufen wurde? Muss ich den Objektabsender verwenden, um Informationen zu erhalten? Aber wie?

Ich hoffe ihr könnt mir helfen

4voto

Thomas Levesque Punkte 277723

Verwenden Sie einfach eine Flagge:

private bool _isInButtonClick;

private void button_Click(object sender, EventArgs e)
{
      try
      {
          _isInButtonClick = true;
          //Changes the Text in the RichBox, EXAMPLE:
          richtTextBox.Text = "Now Changed and calling Method richTextBox_TextChanged";
      }
      finally
      {
          _isInButtonClick = false;
      }
}

 private void richTextBox_TextChanged(object sender, EventArgs e)
 {
         if(_isInButtonClick)
         {
           //DO SOMETHING
         }
         else
         {
           //DO SOMETHING
         }
 }

2voto

Binary Worrier Punkte 49250
private void richTextBox_TextChanged(object sender, EventArgs e)

Hier sender ist die RichTextBox, nicht die Schaltfläche, die den Text geändert hat.

Sie könnten in den Stack-Trace gehen, um herauszufinden, ob sich der Schaltflächenklick auf dem Aufrufstapel befindet, aber das ist übertrieben (als würde man eine Atombombe benutzen, um eine Walnuss zu knacken).

Fügen Sie ein Flag (bool) zu Ihrem Formular hinzu, setzen Sie es beim Klicken auf die Schaltfläche auf true und überprüfen Sie es im TextChanged-Ereignis. Am Ende des Schaltflächenklicks setzen Sie es wieder auf false.

Wenn Sie dies tun, würde ich Ihnen raten, Folgendes zu verpacken signal Logik in einer Klasse, die IDispose implementiert, und verwenden Sie sie in using Erklärungen.

Aber sind Sie sicher, dass Sie diese Funktion benötigen?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X