2011-08-17 3 views
0

그룹 레이블 위에 확인란이있는 그룹 상자처럼 작동하는 사용자 정의 컨트롤을 개발했습니다. 일단 체크 박스가 선택 해제되면 그룹의 모든 컨트롤이 비활성화됩니다.WinForms 사용자 정의 컨트롤에서 이벤트를 노출하는 방법

필요할 경우 외부 조치를 수행 할 수 있도록 변경 사항 확인 조치를 표시해야합니다. 또한 Check 상태가 변경된 것으로 나타났습니다.

현재 컨트롤을 사용하면 그룹의 컨트롤 중 하나라도 포커스가 떨어지면 체크 상태가 변경됩니다.

변경된 체크 이벤트를 처리 할 때 외부 핸들러에 대한 이벤트를 다시 발생시켜야합니까? 정의

enter image description hereenter image description here

이벤트 :

/// <summary> 
/// Event to forward the change in checked flag 
/// </summary> 
public event EventHandler CheckedChanged; 

/// <summary> 
/// Event to forward the change in checked state of the checkbox 
/// </summary> 
public event EventHandler CheckStateChanged; 

이벤트 핸들러 코드 :

private void chkBox_CheckedChanged(object sender, EventArgs e) 
{ 
    // Disable the controls within the group 
    foreach(Control ctrl in this.Controls) 
    { 
     if(ctrl.Name != "chkBox" && ctrl.Name != "lblDisplay") 
     { 
      ctrl.Enabled = this.chkBox.Checked; 
     } 
    } 

    // Now forward the Event from the checkbox 
    if (this.CheckedChanged != null) 
    { 
     this.CheckedChanged(sender, e); 
    } 
} 

private void chkBox_CheckStateChanged(object sender, EventArgs e) 
{ 
    // Forward the Event from the checkbox 
    if(this.CheckStateChanged != null) 
    { 
     this.CheckStateChanged(sender, e); 
    } 
} 
+0

올바른 모양입니다. 뭐가 문제 야? – asawyer

+0

사용자가 필드를 입력하거나 변경하면 해당 그룹의 컨트롤이 비활성화됩니다. 그런 다음 그룹을 다시 활성화하고 다음 컨트롤로 이동해야합니다. – TeamWild

답변

1

당신은 거의있다. 이벤트를 외부 클래스의 이벤트 핸들러에 등록하기 만하면됩니다.

CheckedChanged += ExternalChkBox_CheckChanged; 

private void ExternalChkBox_CheckChanged(object sender, EventArgs e) 
{ 
    // External trigger 
} 
+0

컨트롤의 외부 코드에서이 작업을 수행하고 있지만 이벤트 발생으로 인해 포함 된 컨트롤이 비활성화되지 않는다고 확신하지는 않습니다. – TeamWild

+0

@ TeamWild : 귀하의 질문이 무엇인지 잘 모르겠습니다. 어쨌든, 게시 한 코드는 사용자 정의 컨트롤 클래스에 있어야합니다. 그리고 내가 작성한 코드는 외부 클래스로 가야합니다. CustomControl 클래스 자체에서 컨트롤을 활성화/비활성화 할 수 있어야합니다. – CharithJ

+0

현재 접근 방식을 확인해 주셔서 감사합니다. 컨트롤이 느슨한 경우 체크 변경 이벤트를 다시 실행했기 때문에 그룹 컨트롤이 비활성화되는 것으로 가정했습니다. 나는 드로잉 보드로 돌아 가야 할 것이다. : o/ – TeamWild

관련 문제