![](/img/trans.png)
[英]Limiting the current value of NumericUpDown control to another NumericUpDown
[英]Restore value in NumericUpDown
我有一個NumericUpDown。 當用戶更改其值時,我會顯示一個MessageBox進行確認。 如果用戶選擇是,則表示一切正常。 如果用戶選擇否,我想恢復原始值。
我遇到了兩個問題:
Q1。 如何獲得原始價值。
我將它存儲在私有成員變量中,該變量在用戶選擇“是”時更新。 但我想知道是否有更好的方法。
Q2。 將值更改為原始值會再次觸發我的事件處理程序。
我已經設置了if條件來處理它。
這是我目前的代碼:
if (mNumericUpDownValue != mReactantNumericUpDown.Value)
{
bool change = !mIsModified;
if (mIsModified && ReportChangeWarning())
{
change = true;
}
if (change)
{
mReactantGroup = (int)mReactantNumericUpDown.Value;
ClearUserValues();
UpdateControls();
}
else
{
mReactantNumericUpDown.Value = mNumericUpDownValue;
}
}
如果您綁定了您的值,您可以直接阻止更改數字,直到用戶確認。 你會寫這樣的屬性:
private int _testNumber;
public int TestNumber
{
get { return _testNumber; }
set
{
if (_testNumber != value)
{
MessageBoxResult result = MessageBox.Show("Change value?", "Change Value?", MessageBoxButton.YesNo);
if (result == MessageBoxResult.Yes)
{
_testNumber = value;
}
RaisePropertyChanged("TestNumber");
}
}
}
我認為這種邏輯可以簡化
(但我喜歡TrueEddie的回答 - 這對評論來說太過分了)
if (isModified & !Report)
{
mReactantNumericUpDown.Value = mNumericUpDownValue;
}
else
{
mReactantGroup = (int)mReactantNumericUpDown.Value;
ClearUserValues();
UpdateControls();
}
我建議你在你的模型上實現IEditableObject來完成這個行為。 這真的很直接,恕我直言,正確的方式做你想要的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.