2011-05-06 3 views
1

.net 폼 응용 프로그램에 ComboBox 및 DateTimePicker 컨트롤이 있습니다. 두 컨트롤의 관계에 대한 원하는 기능은 한 컨트롤을 수정하면 다른 컨트롤의 값이 변경된다는 것입니다. 다른 컨트롤을 수정하는 로직은 각 컨트롤 변경 이벤트에 있습니다. 콤보 상자 "의 SelectedIndexChanged"하고있는 DateTimePicker은 "변경"과 같은 무언가를 보이는 다음두 개의 컨트롤 참조가 올바르게 하나만 있음

othercontrol.value = value; 

나는 그들이 대 UI에서 보낸 여부를 결정하기 위해 각각의 컨트롤에서 변경 이벤트를 격리 할 수있는 명확한 방법이 있나요 다른 컨트롤의 변경 이벤트로 인해 현재 설정에서 루프가 발생하지 않습니까?

이 글에서는 change 이벤트를 호출하고 단순히 다른 컨트롤의 값을 설정하는 대신 해당 변경 이벤트의 인수를 약간 변경하여 다른 컨트롤 값을 변경할 수 있음을 알 수 있습니다.

답변

1

값의 설정 전에 컨트롤의 이벤트 처리기를 제거하고 값을 설정 한 직후에 다시 추가 할 수 있습니다.

othercontrol.SelectedChanged -= othercontrol_SelectedChanged; 
othercontrol.value = value; 
othercontrol.SelectedChanged += othercontrol_SelectedChanged; 
+0

솔루션은 훌륭하게 작동했습니다. –

1

이것을 사용해보십시오.

좋아, 그것은 조금 해키하지만이 작동합니다 : 또는

private bool eventBubbledDate = false; 
private bool eventBubbleCombi = false; 

protected override MyCombi_OnChange(object sender, eventargs e) 
{ 
    if (eventBubbledDate) 
    { 
    eventBubbledDate = false; 
    return; 
    } 
    eventBubbleCombi = true; 
    myDateTime.Value = myCombi.SelectedValue; 
} 

protected override MyDateTime_OnChange(object sender, eventargs e) 
{ 
    if (eventBubbleCombi) 
    { 
    eventBubbleCombi = false; 
    return; 
    } 

    // process DateStuff here 
    // update other control 
    eventBubbledDate = true; 
} 

, 당신은 부울 '플래그'하지만 bools가 보여 쉽게 생각을 사용하는 대신 상태를 추적하기 위해 열거를 사용할 수 있습니다.

+0

보낸 사람이 항상 컨트롤 자체 인 것처럼 보이며 DateTimePicker의 DateTimePicker가 변경된 이벤트입니다. –

+0

나는 그것을 조사 할 것이다. 조금 걸릴 수도 있습니다. 도와 줘서 고마워! 알려 드리겠습니다. –

+0

두 답변 모두 작동했지만 이벤트에서 메서드를 제거하면 적은 코드가 사용되었습니다. 도와 줘서 고마워. –