2016-10-29 3 views
0

CheckState.Indeterminate으로 설정되어 있습니다. 타이머가 만료되면 CheckState.Unchecked으로 설정되고 외부 출력 신호가 꺼집니다. 여태까지는 그런대로 잘됐다.불확정 체크 박스를 선택하지 않고 체크 표시로 변경하는 방법은 무엇입니까?

사용자가 Indeterminate CheckBox을 클릭하면 현재 코드에서 Unchecked CheckBox이됩니다. 이를 가로 채고 Checked CheckBox으로 만들고 싶습니다.

사용자를위한 효과는 타이머를 취소하고 사용자가 상자를 선택 취소하거나 사용자가 인계하는 별도의 프로세스를 시작하고 불확정 CheckBox가 다시 설정 될 때까지 출력을 유지하는 것입니다.

그는 출력을 끄고 명시 적으로 다시 켜야합니다.

유효성 검사 이벤트를 시도했지만 상자를 종료 할 때까지는 발생하지 않습니다.

업데이트 1 : 사용자가보고 싶은 것을 조금 분명히하기 위해. 표시등이 꺼지면 상자는 항상 선택 취소됩니다.

시스템의 자동화 된 부분이 실행 중일 때 표시등이 켜져 있습니다. 사용자가 컨트롤을 보면 사용자가 컨트롤을 활성화하지 않았지만 켜져 있기 때문에 컨트롤이 불확정 상태입니다.

타이머가 시작되면 2 분 동안 표시등이 켜져 있습니다. 이 시간 동안 사용자는 여전히 불확정 상태를 보게됩니다.

사용자가 불이 켜져 있어야하는 경우 불확정 상태를 제거하는 확인란을 선택합니다. 그가 통과 할 때 그는 빛을 끄는 상자의 선택을 수동으로 해제하거나 자동 프로세스를 다시 시작하여 다시 불확정하게 만듭니다.

난 당신이 CheckStateChanged 이벤트를 필요 내가 생각하는 자동 검사 재산

+1

. 사용자가 확인란을 클릭하여 선택하지 않은 상태를 생략하고 선택 상태로 설정할 말을합니다. 그 맞습니까? –

+0

@KarelTamayo 예. –

+0

'CheckState_Changed' 이벤트를 사용해 보셨습니까? – Berkay

답변

2

과감한 조치가 필요하지 않습니다. Checkbox가 AutoCheck 속성을 구현하는 방식이 마음에 들지 않습니다. 따라서 컨트롤을 선택하고 AutoCheck 속성을 False로 설정하십시오. 체크 상태를 원하는대로 제어 할 수있게 해줍니다.

는 마우스 클릭 또는 스페이스 바를 눌러과 검사에 사용자가 불확정에서 바로 상태를 플립 할 수 있도록 클릭 이벤트 처리기를 추가 : 나는 그것을 제대로하면 나도 몰라

private void checkBox1_Click(object sender, EventArgs e) { 
     checkBox1.CheckState = checkBox1.CheckState == CheckState.Checked ? 
      CheckState.Unchecked : CheckState.Checked; 
    } 
0

인식하지 않았다.

이 시도하고 알려 : 나는 표준 컨트롤의 동작을 변경에 대해 조언하고 있습니다

//mark the process as running (check box is Indeterminate state) 
private bool processIsRunning = true; 

private void chkState_CheckStateChanged(object sender, EventArgs e) 
{ 
    //the user clicks the indeterminate checkbox 
    if (processIsRunning && chkState.CheckState == CheckState.Unchecked) 
    { 
     processIsRunning = false; 
     chkState.CheckState = CheckState.Checked; 
    } 
} 
+0

이것은 거의 끝났으며 실제로 작동하도록 만들 수도 있지만 현재 상태를 초과 할 때 스스로를 호출 할 것이라고 생각합니다. 그래서 나는 2 차적인 변화를 무시하기 위해 더 많은 상태 변수가 필요할 것이다. –

1

, 그러나 이것은 당신이 필요로하는 경우, 당신은 체크 박스를 서브 클래스와 온 클릭 메소드를 오버라이드 (override) 할 수 있습니다.

This은 표준 동작이 무엇인지 볼 수있는 곳입니다.

switch 명령문에 논리를 다시 작성하고 기본 명령을 호출하기 만하면됩니다. 우리는 false로 자동 검사를 설정하여 기본의 checkState에는 논리를 억제 할 필요가 다음 나중에 이전 값으로 복원 :

public class MyCheckBox : CheckBox 
{ 
    protected override void OnClick(EventArgs e) 
    { 
     if (AutoCheck) 
      switch (CheckState) 
      { 
       case CheckState.Indeterminate: 
        CheckState = CheckState.Checked; 
        break; 
       case CheckState.Unchecked: 
        if (ThreeState) 
        { 
         CheckState = CheckState.Indeterminate; 
        } 
        else 
        { 
         CheckState = CheckState.Checked; 
        } 
        break; 
       default: 
        CheckState = CheckState.Unchecked; 
        break; 
      } 

     var oldAutoCheckValue = AutoCheck; 
     AutoCheck = false; 
     base.OnClick(e); 
     AutoCheck = oldAutoCheckValue; 
    } 
} 

는 대체 솔루션으로, 당신은 UX를 개선하기 위해 라디오 버튼을 사용하는 것이 좋습니다.

+0

라디오 버튼을 "선택 취소"할 수 없으며 간단한 "전등 스위치"를 사용자에게 쉽게 반영하지 않습니다. 나는 작동 논리를 반영하도록 해답을 업데이트하고 명확하지 않기 때문에 목적에 대한 설명을 추가했다. –

+0

3 상태 체크 박스는 어떻게 불확정 상태의 사용자에게 간단한 "전등 스위치"를 반영합니까? – CloneXpert

+0

편집 된 답변의 작동 방식이 마음에 들지 않습니다. 논리가 어떻게 진행되는지 따라가는 것이 어렵습니다. 특히 수행중인 작업과 모순되는 의견을 다루는 것이 좋습니다. – CloneXpert

관련 문제