簡體   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