[英]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.