也许我的问题会让你感到困惑。
我想根据我的字符串值更改触发事件。
我知道当字符串值改变时可以触发事件。
但问题是:我不知道字符串值何时会改变。
要解决此问题,请使用计时器持续监视字符串值的变化。
但我需要一个更好的解决方案。
感到困惑,是吗?
例如,
我有一个DLL,比如MyDll.dll。
MyDll有一个名为STATUS的变量
这个变量有两个值,"成功"或" InProgress"。
"成功" - 如果一个方法,比如LongProcess,就完成了。 " INPROGRESS" - 如果LongProcess仍在处理中。
在我的程序中,如果MyDll.STATUS有一个"成功"我需要触发一个事件。值。
为实现这一目标,我可以使用计时器控制来持续监控值何时更改为"成功"。
但我想要一些更好的方法来实现这一目标。有什么建议吗?
答案 0 :(得分:5)
您可以专门定义属性的get / set行为(使用支持字段),而不是使用字段或auto属性。 通过这种方式,只要该属性的值发生更改,您就可以触发操作/事件。例如......
private Status _myStatus;
public Status MyStatus
{
get { return _myStatus; }
set
{
if (value == _myStatus) return;
_myStatus = value;
// RAISE YOUR EVENT HERE
}
}
此示例将允许在MyStatus
的值发生更改时引发事件。显然,我已假设Type
的{{1}}为MyStatus
,因此只需将其更改为Status
或类型为何。
答案 1 :(得分:0)
在这种情况下,创建一个属性而不是变量。在其设置部分引发一个事件,您可以在其上附加处理程序并收听。
喜欢这个
private string _status;
Public Event OnStatusChanged;
public string Status
{
get
{
return _status;
}
set
{
_status = value;
RaiseEvent OnStatusChanged;
}
}
答案 2 :(得分:0)
您可以使用NO CODING执行此操作。
对于布尔值: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_CheckedChanged之前,checkBox1.Checked的值或属性会更新,但表格上的复选框在 checkBox1_CheckedChanged返回后才会更新。即使你打电话给this.Update()
。 (已测试)(在针对.NET 3.0的VS2010上测试过。)