C# 对象发送器 - 获取从中调用它的方法

本文关键字:调用 方法 获取 对象 | 更新日期: 2023-09-27 18:05:51

我有这些方法:

    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调用的?我是否必须使用对象发送器来获取信息?但是怎么做呢?

希望你们能帮助我

C# 对象发送器 - 获取从中调用它的方法

只需使用一个标志:

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
         }
 }
private void richTextBox_TextChanged(object sender, EventArgs e)

这里sender的是 richTextBox,而不是更改文本的按钮。

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

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

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

也就是说,您确定需要此功能吗?