2013-07-17 2 views
0

NumericUpDown이 있습니다. 사용자가 값을 변경하면 확인할 MessageBox가 표시됩니다. 사용자가 예를 선택한 경우 모두 정상입니다. 사용자가 아니요를 선택한 경우 원래 값으로 복원하려고합니다.NumericUpDown의 값 복원

Q1 :

나는이 문제에 실행했다. 원래 값을 얻는 방법.
사용자가 예를 선택할 때 업데이트되는 개인 멤버 변수에 저장합니다. 그러나 더 좋은 방법이 있는지 알고 싶습니다.

2. 값을 원래 값으로 다시 변경하면 이벤트 처리기가 트리거됩니다.
if를 처리하기 위해 조건을 넣었습니다. 나는 당신이이 동작을 수행하기 위해 모델 IEditableObject을 구현 제안

if (mNumericUpDownValue != mReactantNumericUpDown.Value) 
{ 
    bool change = !mIsModified; 
    if (mIsModified && ReportChangeWarning()) 
    { 
     change = true; 
    } 
    if (change) 
    { 
     mReactantGroup = (int)mReactantNumericUpDown.Value; 
     ClearUserValues(); 
     UpdateControls(); 
    } 
    else 
    { 
     mReactantNumericUpDown.Value = mNumericUpDownValue; 
    } 
} 
+0

당신의 Q1은 :이 같은 속성을 작성합니다 벌금. 컨트롤을 바인딩 할 때 또는 사용자가 변경된 값을 커밋 할 때마다 원래 값을 저장하십시오. Q2와 관련하여 가장 간단한 방법은 이전 값으로 재설정 할 때 이벤트 'ValueChanged'리스너 등록을 취소하고 값을 변경하고 이벤트 리스너를 다시 할당하는 것입니다. 'NumericUpDown'에 사용자 입력으로 인해 값이 변할 때만 발생하는 특수한 이벤트가 있으면 머리 꼭대기에서 나는 잘 모릅니다. –

+0

감사합니다. 나는 우리가 사건 등록을 취소 할 수 있다는 것을 몰랐다. 내가 여기 오기 전에 내가 인터넷 검색을하고 있었어. –

답변

0

:

여기에 내 현재 코드입니다. 그것은 정말로 아주 솔직하고 IMHO는 당신이 원하는 것을하는 올바른 방법입니다.

+0

나는 이것을 구현하려고 애쓸 것이다. 나는 존재했던 것과 같은 것을 몰랐다. 감사. –

1

값을 바인딩하는 경우 사용자가 확인하기 전에 번호를 변경하지 않아도됩니다. 나는이 논리가
을 단순화 할 수 있다고 생각

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"); 
      } 
     } 
    } 
0

(하지만 난 TrueEddie에서 답을 좋아 -이 코멘트 너무 많이했다)

if (isModified & !Report) 
{ 
    mReactantNumericUpDown.Value = mNumericUpDownValue; 
} 
else 
{ 
    mReactantGroup = (int)mReactantNumericUpDown.Value; 
    ClearUserValues(); 
    UpdateControls(); 
} 
관련 문제