是否可以将CheckedChanged事件(或任何其他C#事件)声明为User事件?问题是,如果通过代码更改属性Checked,则调用Event并且这是我不想要的(例如在MFC中,事件是用户事件而不是属性事件)。我用布尔标志传递它,这在2011年有点尴尬!
答案 0 :(得分:2)
您可以取消订阅该活动。更改值后,您可以再次订阅。
this.checkBox1.CheckedChanged -= new EventHandler(checkBox1_CheckedChanged);
this.checkBox1.Checked = true; // will not firing the CheckedChanged event
this.checkBox1.CheckedChanged += new EventHandler(checkBox1_CheckedChanged);
另外,您可以将变量设置为绕过此
bool isUser = true;
public Form1()
{
InitializeComponent();
isUser = false;
this.checkBox1.Checked = true;
isUser = true;
}
void checkBox1_CheckedChanged(object sender, EventArgs e)
{
if (!isUser) // check if the change has fired by user
return;
// ...
}
两者都可以使用
希望这会有所帮助。
答案 1 :(得分:1)
C#绝对不支持“用户事件”。它仅支持使用关键字事件指定的一种类型的事件(它们基本上只是受控委托引用)。如果您想更多地了解C#如何处理事件,请查看Jon Skeet's excellent treatment of the subject here。
现在,你所比较的并不是苹果。 MFC是一个框架。 C#是一种语言。因此,就框架而言,它取决于框架。在您的示例中,看起来您指的是WinForms。如果是这样 - 再一次,答案是遗憾的是:WinForms不支持您描述的“用户事件”。