我正在使用numericupdown控件。當以編程方式分配值或用戶更改該值時,會觸發ValueChanged事件。C#winforms numericupdown控件
我希望事件只在用戶更改值時觸發,而不是在設置最小值和最大值時觸發。如何做呢?
我正在使用numericupdown控件。當以編程方式分配值或用戶更改該值時,會觸發ValueChanged事件。C#winforms numericupdown控件
我希望事件只在用戶更改值時觸發,而不是在設置最小值和最大值時觸發。如何做呢?
嘗試是這樣的:
var changeFromCode = false;
void abc()
{
// This is where you change value in code.
changeFromCode = true;
ud1.Value = 15;
changeFromCode = false;
}
// Sorry, I am not sure about handler signatures
void UpDownValueChanged(object sender, EventArgs e)
{
if (changeFromCode)
return;
}
大廈TheVillageIdiot的答案...你可以創建可重用的子類,如:
public sealed class MyNumericUpDown : NumericUpDown {
private bool suppress;
protected override void OnValueChanged(EventArgs e) {
if (!suppress) {
base.OnValueChanged(e);
}
}
public void SetRange(decimal min, decimal max) {
suppress = true;
try {
Minimum = min;
Maximum = max;
}
finally {
suppress = false;
}
}
}
+1我喜歡你將解決方案提升到更高抽象層次的方式,我想我可能會在頻繁的場合使用類似的策略,當我需要將遞歸抑制爲兩個或更多)「同步」控件(如TreeView和Listview)更新。好奇心:如果你想關注你爲什麼讓這個類封閉,爲什麼你使用了try/catch塊,那會很感激。謝謝 ! – BillW
我有一個默認密封的習慣。在這種情況下,這並不重要。至於try/finally - 另一種習慣是避免一種情況,即異常退出方法將suppress set設置爲true。儘管在這種情況下,我不知道是否有可能發生異常,但確保將標誌恢復到原來的狀態始終是一種很好的做法。 – Josh
+1謝謝你的迴應,喬希。我花了不到五分鐘的時間來實現一個「遞歸證明」派生的TreeView和ListView,遞歸由每個Public Property控制,並驗證它們是否按預期工作:一個缺點:您必須修改Designer.cs文件,或者自己鞭打它們,自己設置無數的屬性,或者至少使用默認控件進行設計,然後將設置從Designer.cs類中提取出來並將它們「移植」到其他位置,然後進入並將聲明切換爲派生類型。我通常反對在Designer.cs文件附近。 – BillW
+1,簡單方便,它的工作原理。 –
解決方案很簡單,它的工作原理 – Raghavendra