【发布时间】:2010-06-23 17:18:17
【问题描述】:
我在一个表单上有一堆控件,它们的所有“更改”事件都指向同一个事件处理程序。其中一些是 txtInput1 的 TextChanged、chkOption1 的 CheckedChanged 和 cmbStuff1 的 SelectedIndexChanged。这是事件处理程序:
private void UpdatePreview(object sender, EventArgs e)
{
// TODO: Only proceed if event was fired due to a user's clicking/typing, not a programmatical set
if (sender.IsSomethingThatTheUserDid) // .IsSomethingThatTheUserDid doesn't work
{
txtPreview.Text = "The user has changed one of the options!";
}
}
我希望 if 语句仅在用户更改 TextBox 文本或单击复选框或其他任何内容时运行。如果程序的其他部分更改了文本或复选框,我不希望发生这种情况。
【问题讨论】:
-
我可以发誓我最近刚刚回答了一个完全一样的问题......
-
在这里。它不完全是一个完整的副本,但答案仍然是一样的:stackoverflow.com/questions/3071811/…
-
您能否澄清一下您说“如果程序的其他部分更改了文本或复选框,我不希望发生这种情况。”
-
我想补充的一点是,如果您想阻止事件代码运行,这将起作用。但是,如果您的事件被调用很多次甚至可能数百次,这不会使您免于性能问题。您将需要研究取消挂钩和抑制事件。