繁体   English   中英

变量值更改时触发事件

[英]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的值更改时引发事件。 显然,我已经假设MyStatusTypeStatus因此只需将其更改为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM