我有这些方法:
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调用的? 我是否必须使用对象发送者来获取信息?但是如何?
希望你们能帮助我
答案 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
语句中使用它。
那就是说,你确定需要这个功能吗?