簡體   English   中英

在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM