2012-07-23 4 views
2

이 질문은 어려울 수 있지만 최선을 다할 것입니다. 너무 많은 것들이 SO와 다른 곳에서 이벤트를 만들기 위해 방아쇠를 당긴다. 그러나 나는 반대를 원한다. (적어도 나는 생각한다!).양식 제어 값을 변경할 수는 있지만 이벤트를 트리거하지는 않습니까?

양식 (numericUpDowns)에 여러 컨트롤이 있습니다. 각각의 업 다운에 대해, 나는 값이 변경되었는지를 관찰하고 "ValueChanged"메소드를 트리거 할 것이다.

private void numericUpDown1_ValueChanged(object sender, EventArgs e) 
{ 
    //do some complicated code ... 
} 

그것은 모두 fomr의 재 계산하지만 나는 끝까지 내 ValueChanged melthods를 호출하는 방법에 몇 가지 값을 설정하지하려면 원인이 상하 컨트롤의 변경과 잘 일하고있어?

나는 ON과 OFF이 설정하는 방법이 있나요 거의이

// start ignoring form events here 
numericUpDown1.Value = 500; 
numericUpDown2.Value = 50; 
numericUpDown3.Value = 0; 
// resume detecting form events here ! 

같은 싶습니다? 내가 걱정해야 할게 있니?

내 제한 C#을 지식은이 점에 날 리드 가장 좋은 것은

private void numericUpDown1_ValueChanged(object sender, EventArgs e) 
{ 
    if (!bIgmoreEvents) 
    { 
     //do some complicated code ... 
    } 
} 

이 코드를 건너 뛸 것이다 ...라는 변수 "bIgnoreEvents"를 만들어 내 ValueChanged 방법의 각을 사용하는 것입니다 그러나 지저분 해 보인다. 더 간단한 방법이 있습니까? 또한이 작업을 수행 할 수

+0

왜 당신은 지저분하다고 생각합니까? 'if (! bIgnoreEvents)'를 의미한다고 가정 할 때, 일을 잘하고 직선적이고 이해할 수 있고 유지할 수있는 방법으로 할 것입니다. –

+0

그래, 어쩌면 마법처럼 고쳐질거야.) 어쩌면 "지저분한"것이 아닐지도 모르겠다. 나는 이것에 상당히 익숙하지 않기 때문에 나는 종종 나쁜 습관을 찾아 낼까 걱정하고있다. ... – Sisyphus

+2

글쎄, 아주 우아함과 덜 읽을 수있는 영리 함 사이의 미세한 선 이죠. 그리고이 새로운 것을 처음 접한 이래로 나는 그런 식으로 목표를 세우지 않을 것입니다. 대신 가능한 간단하고 이해하기 쉬운 상태에서 작동하는 것을 얻는 데 집중하십시오. [KISS 원칙] (http://people.apache.org/~fhanik/kiss.html)을 따르십시오. –

답변

6

:

var eventHandler = new EventHandler((o, a) => 
{ 
    //do stuff 
}); 

numericUpDown1.ValueChanged += eventHandler; 

//normal behaviour 

//remove eventHandler  
numericUpDown1.ValueChanged -= eventHandler; 

numericUpDown1.Value = 500; 
numericUpDown2.Value = 50; 
numericUpDown3.Value = 0; 

//add eventHandler 
numericUpDown1.ValueChanged += eventHandler; 
관련 문제