[英]Trigger an Event when a Variable Value Changes
也许我的问题会让您感到困惑。
我想基于更改的字符串值来触发事件。
我知道可以在字符串值更改时触发事件。
但问题是:我不知道字符串值何时会更改。
要解决此问题,请使用计时器连续监视字符串值的变化。
但是我需要一个更好的解决方案。
感到困惑,是吗?
例如,
我有一个DLL,例如MyDll.dll。
MyDll有一个名为STATUS的变量
此变量具有两个值,即“成功”或“进行中”。
“成功”-如果某个方法(例如LongProcess)完成了。 “ InProgress”-如果LongProcess仍在处理中。
在我的程序中,如果MyDll.STATUS具有“成功”值,则需要触发一个事件。
为此,我可以使用计时器控件连续监视何时将值更改为“成功”。
但是我想要一些更好的方法来实现这一目标。 有什么建议吗?
您可以专门定义属性(带有后备字段)的获取/设置行为,而不是使用字段或自动属性。 这样,您可以在该属性的值更改时触发动作/事件。 例如 ...
private Status _myStatus;
public Status MyStatus
{
get { return _myStatus; }
set
{
if (value == _myStatus) return;
_myStatus = value;
// RAISE YOUR EVENT HERE
}
}
此示例将允许在MyStatus
的值更改时引发事件。 显然,我已经假设MyStatus
的Type
为Status
因此只需将其更改为string
或其他类型即可。
在这种情况下,请创建属性而不是变量。 在它的设置部分引发一个事件,您可以在该事件上附加一个处理程序并收听。
像这样
private string _status;
Public Event OnStatusChanged;
public string Status
{
get
{
return _status;
}
set
{
_status = value;
RaiseEvent OnStatusChanged;
}
}
您可以不进行编码。
对于布尔值:1)在表单上创建一个复选框。 2)双击复选框。 做完了
VS创建,链接并导航了您,以编辑一个新函数,无论用户单击控件还是程序代码实际上更改了该值,只要复选框发生更改,该函数都会调用。 为其分配相同的值无效。 (已测试)
...
// Demonstrate behavior:
checkBox1.Checked = false; // does not trigger checkBox1_CheckedChanged (the first time) because the form defaulted it to false)
checkBox1.Checked = false; // does not trigger checkBox1_CheckedChanged
checkBox1.Checked = true; // triggers checkBox1_CheckedChanged
checkBox1.Checked = true; // does not trigger checkBox1_CheckedChanged
checkBox1.Checked = false; // triggers checkBox1_CheckedChanged
checkBox1.Checked = false; // does not trigger checkBox1_CheckedChanged
...
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
// Modal pop-up to display checkBox1.Checked (it converts to "False" or "True"):
MessageBox.Show(new Form() {TopMost=true,TopLevel=true}, "Checked =" + checkBox1.Checked, "Message", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
缺点:不是最佳设计模式。 您现在在表单上有一个虚假字段(除非您在那里想要它)。 您可以禁用它以防止用户切换它,它仍然可以工作。 (已测试)您可以使它不可见,但它仍然是“那里”。 要取消该表单,您必须替换借用的GUI代码。
恐怖:值或属性checkBox1.Checked在调用checkBox1_CheckedChanged之前得到更新,但是直到 checkBox1_CheckedChanged返回之后 ,窗体上的复选框才更新 。 即使您调用this.Update()
。 (已测试)(在针对.NET 3.0的VS2010上进行了测试。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.