我有这个简单的代码......
Public class Form1 : Form {
//bool value = false;
bool value;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e) {
if (value) {
MessageBox.Show("ValueChanged");
}
}
private void btn_Click (Object sender, EventArgs e) {
value = true;
MessageBox.Show("btnClicked");
}
}
MessageBox显示何时触发btn_Click,但不是在Form1_Load事件中?
我还尝试将if(value)语句放在Form1构造函数中(在InitializeComponent方法之后),但bool保持不变。有什么建议吗?
编辑: 但是,如果它没有“重置”数据呢?
答案 0 :(得分:0)
表单构造函数和Form_Load代码在按钮单击事件处理程序将变量设置为true之前运行。如果您关闭表单并创建它的新实例,该实例将拥有自己的字段,该字段最初也是false。因此,if语句中的代码将永远不会被执行。
答案 1 :(得分:0)
简单地写一个if
语句不会“监视”一个更改的值 - 它只是在你告诉它时运行。
以下事件处理程序
private void Form1_Load(object sender, EventArgs e) {
if (value) {
MessageBox.Show("ValueChanged");
}
}
在表单加载时仅运行 。由于value
已更改,因此绝对没有理由再次运行它。请注意,这并不意味着value
没有变化。
您可能希望阅读C# events,这是Observer Pattern的实现。您可能也对INotifyPropertyChanged interface感兴趣。