2012-01-16 4 views
0

C#의 CheckListBox가 있고 상자의 checkstate 중 하나가 변경 될 때마다 이벤트를 트리거하려고합니다. 이벤트 목적은 일부 RichTextBox를 변경하는 것입니다.CheckListBox의 CheckState 값이 변경 될 때 이벤트를 트리거하는 방법

나는이 코드를 가지고 있지만, 어떤 이유로 체크 박스 중 하나가 선택되지 않았을 때만 이벤트를 트리거합니다. 나는 성공하지 못한 코드에 무엇이 잘못되었는지 알아 내려고 노력했다. 도움이 될 것입니다.

private void clbAllRooms_ItemCheck(object sender, ItemCheckEventArgs e) 
    { 
     //If the checkstate changed, update price 
     //It updates price only when the state turns from Checked to Uncheck 
     if (e.NewValue != e.CurrentValue) 
      Update_rtbPrice(); 
    } 
+0

어떤 언어입니까? 올바른 잠재 고객을 만지려면 질문을 편집하여 적절한 태그를 추가해야합니다. 최소한 언어 이름을 추가하십시오. 당신은 또한 '>'후행을 제거하는 질문 제목을 해결할 수 – Seki

답변

1

문제는 귀하의 Update_rtbPrice() 메소드에 의심의 여지가 없습니다. 의미있는 작업을 수행하기 위해 목록 상자의 GetItemChecked() 메서드를 호출해야하며이 메서드는 이벤트 처리기에서 메서드 호출을 만들 때 문제가됩니다. 이벤트가 실행될 때 이후 항목 확인 상태는 까지 변경되지 않습니다.

해결 방법은 컨트롤의 상태가 업데이트 된 후에 실행되도록 호출을 지연시키는 것입니다. 이와 같이 :

private void clbAllRooms_ItemCheck(object sender, ItemCheckEventArgs e) { 
     this.BeginInvoke(new MethodInvoker(() => Update_rtbPrice())); 
    } 
+0

고마워요 ... 나는 하루 종일이 문제를 해결하기 위해 노력하고 있었는데 ... 나는 그의 thougt을 결코 가지지 않을거야 –

+0

좋은 캐치. 나는 사건 중에 그 방법을 부르는 그에 관한 반향에 대해 생각하지 않았다. – LarsTech

+0

죄송합니다. +1을 잊어 버렸습니다. – LarsTech