C#对象发送者 - 获取调用它的方法

时间:2011-08-18 08:35:17

标签: c# asp.net

我有这些方法:

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

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

如何解决这个问题,知道它是否是从Button_click调用的? 我是否必须使用对象发送者来获取信息?但是如何?

希望你们能帮助我

2 个答案:

答案 0 :(得分:4)

只需使用标志:

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
         }
 }

答案 1 :(得分:2)

private void richTextBox_TextChanged(object sender, EventArgs e)

此处sender是richTextBox,而不是更改文本的按钮。

您可以进入堆栈跟踪以发现按钮单击是否在调用堆栈上,但这是过度杀伤(例如使用核弹来破解核桃)。

在表单中添加一个标志(bool),在单击按钮时将其设置为true,然后在TextChanged事件中检查它,然后在单击按钮结束时再次将其设置为false。

如果你这样做,我建议将这个signal逻辑包装在一个实现IDispose的类中,并在using语句中使用它。

那就是说,你确定需要这个功能吗?