2012-06-23 15 views
4

C# (.NET 4.0)에서 작은 응용 프로그램을 작성하고 있습니다. numericUpDown에서 값이 변경 될 때 이벤트를 발생 시키려고하지만, 컨트롤이 포커스를 잃거나 여러 변경 사항이있을 때 numericUpDown ValueChanged가 발생하는 것처럼 보입니다.NumericUpDown ValueChanged 이벤트가 즉시 발생합니까?

긴 설명 : 변경 사항이 즉시 반영되도록 내가, 객체의 속성 (OnPropertyChanged를) numericUpDown을 결합하고 . 하지만이 새로 변경된 numericUpDown 값을 사용하여 무언가를 계산할 필요가 있습니다 (전역/객체와 관련 없음). 그러나 ValueChanged 이벤트를 사용하면 너무 늦게 발생합니다.

간략한 설명 :

나는 OnPropertyChanged를 비슷한 기능을 가진 이벤트가 필요합니다.

어떻게해야합니까?

편집 : 의 valueChanged에서 이벤트 처리기 내가 객체에 대한 몇 가지 계산을했지만 아직 객체 속성에 최선을 다하고되지 않은 변경 한 값, 따라서 나는의 valueChanged 이벤트가 뒤쳐 것을 생각했다.

도움 주셔서 감사합니다.

+0

ValueChanged 이벤트는 확실히 OnPropertyChanged 종류의 이벤트와 같습니다. 계산량을 줄이려면 Leave 이벤트 사용을 고려하십시오. –

+1

@HansPassant 문제는 ​​화살표를 사용하여 숫자를 늘리면 ValueChanged 이벤트가 실행되지 않는다는 것입니다. 화살표를 다시 누르면 실행되지만 이전 변경에 대해서는 실행됩니다. – Ben

+1

나는 그것을 전혀 할 수 없다. 문제를 재현하는 코드를 게시하십시오. –

답변

7

ValueChanged를 사용해야합니다. 내가 확인하고 컨트롤이 포커스를 잃었을 때 발사하지 않으며, 당신이 주장하는대로 여러 변경 사항을 입력 할 수 없습니다. 정말 세 번 클릭하면 메시지 상자에 첫 번째 클릭에서 기대 값이 표시되므로 원하는 결과를 얻을 수 있습니다. ValueChanged가 너무 늦게 발동했다고 말하는 곳을 찾지 못합니다. 화면에 다시 그리기 전에도 새 값을 메시지 상자에 표시합니다.

private void numericUpDown1_ValueChanged(object sender, EventArgs e) 
    { 
     MessageBox.Show("Value changed to " + numericUpDown1.Value.ToString()); 
    } 
+0

도움이되어서 기쁩니다! :-) – GrayFox374

+2

그것은 나를 도운 .Value 속성이었습니다. . 텍스트가 너무 늦게 업데이트되었습니다. –