2010-12-06 4 views

답변

3

CheckedListBox는 이러한 방식으로 작동하지 않습니다. CheckedListBox.Items은 문자열 모음이므로 "사용 안 함"으로 설정할 수 없습니다.

herehere과 같은 가능한 해결책에 대한 몇 가지 토론이 있습니다.

8

항목을 사용하지 않도록 설정하는 것은 좋은 생각이 아니므로 사용자가 확인란을 클릭해도 아무런 효과가 없다는 좋은 의견은 없습니다. 맞춤형 그림을 사용하여이를 분명하게 볼 수는 없습니다. 가장 좋은 방법은 단순히 항목을 생략하는 것입니다.

당신은 그러나 쉽게 ItemCheck 이벤트로 사용자를 물리 칠 수 있습니다

private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e) { 
     if (e.Index == 0) e.NewValue = e.CurrentValue; 
    } 
+2

thnx이지만 시각적으로 옵션을 사용할 수 없음을 사용자에게 알리고 싶습니다. –

+1

"사용자 정의 도면을 사용할 수 없습니다"- 사실이 아니지만 약간 어려울 수 있습니다. * 텍스트 *를 비활성화 된 것으로 사용자 정의하는 것이 더 쉬울 것입니다 * 및 * 여기 제공된 비활성화 코드를 사용하십시오. –

+1

사용자 지정 드로잉을 다시 구현하면 CheckedListBox를 사용하는 지점을 무력화하고 ListBox를 사용할 수도 있습니다. 명시된 바와 같이 옵션을 사용할 수 없다는 것을 분명히하는 간단한 방법은 Items 컬렉션에서이를 제거하는 것입니다. –

1
솔루션 이벤트 ItemChecking 사용하는 것입니다

:

_myCheckedListBox.ItemChecking += (s, e) => e.Cancel = true; 

이 모든 항목에서 모든 검사를 취소됩니다 만, 당신은 항상 더 세련된 솔루션을 할 수 있지만 현재를 테스트 할 수 있습니다. .SelectedItem

7

다음 항목을 사용하지 않으려면 :

checkedListBox1.SetItemCheckState(0, CheckState.Indeterminate); 

SetItemCheckState 음영 모양 위의 부분적인 답변이 결합

+1

이것은 회색으로 보이지만 사용자가 항목을 검사하지 못하도록합니다 (청취자를 구현하여 수행 할 수 있습니다) – personne3000

10

나를 위해 큰 일을 표시하는 데 사용됩니다 항목 CheckState 열거 불확정의 인덱스를합니다. myState가 비활성화해야합니다 항목에 대한 CheckState.Indeterminate이다

myCheckedListBox.Items.Add(myItem, myState); 

: 함께 목록에 항목을 추가 .

myCheckedListBox.ItemCheck += (s, e) => { if (e.CurrentValue == CheckState.Indeterminate) e.NewValue = CheckState.Indeterminate; }; 

이 당신이 정상적인 목적으로이 목록에 '불확정'를 사용하는 것을 허용하지 않습니다하지만 무엇 하나 것 매우 유사한 모양을 준다 : 그런 다음 변경되는 해당 항목을 유지하기 위해 이벤트 처리기를 추가 무능한 품목을 위해 예상하고 정확한 행동을 제공한다!

+0

동일한 작업을 시도한 결과이 이벤트 핸들러는 작성된대로 비활성화 된 후에는 'disabled'확인란을 프로그래밍 방식으로 다시 활성화합니다. ItemCheck 이벤트가 발생하면 기존의 불확정 상태가 표시되어 무시됩니다. 대부분의 경우 상태 변경이 사용자가 시작한 것인지 또는 프로그래밍 방식인지를 확인하기 위해 추가 부울 검사가 필요합니다. 물론, 경쟁 조건으로부터 부울을 보호하는 방법은 독자의 연습입니다 ... – jimbobmcgee

5

나는 그것이 꽤 오래되었지만 목록 상자를 검색 할 때 이것을 발견했으며 토론에 추가 할 것이라고 생각했습니다.

목록 상자가 있고 확인란을 모두 사용하지 않도록 설정하면 클릭 할 수 없지만 컨트롤을 사용하지 않도록 설정하면 사용자가 여전히 스크롤 할 수 있습니다.당신은이 작업을 수행 할 수 있습니다

첫째, 내가 양식을로드하는 동안 목록에 추가로 그렇게 확인란이 회색으로 표시되었다 만든 : 내가 쓴 헬프 데스크 응용 프로그램에서 그것을 어떻게

다음
listbox.SelectionMode = SelectionMode.None 
0

이야

private void chkLst_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     if (chkLst.SelectedItem.ToString() == "SpecificGroupName") 
     { 
      chkLst.SetItemCheckState(chkLst.SelectedIndex, CheckState.Indeterminate); 
     } 
    } 

목을 : 클릭하면 그것을 클릭 상태로 유지 보장하도록

private void frmMain_Load(object sender, EventArgs e) 
    { 
     List<string> grpList = new List<string>(); 
     ADSI objADSI = new ADSI(); 

     grpList = objADSI.fetchGroups(); 

     foreach (string group in grpList) 
     { 
      if (group == "SpecificGroupName") 
      { 
       chkLst.Items.Add(group, CheckState.Indeterminate); 

      } 
      else 
      { 
       chkLst.Items.Add(group); 
      } 

     } 

는 그럼 난 이벤트를 사용 여기서 아이디어 란 내 양식에서 항목 클릭/선택을 상자가 확인하도록 설정 한 것입니다. 이 방법으로 한 돌로 두 마리의 새를 죽일 수 있습니다. 이 이벤트로 인해 항목을 처음 확인하고 양식로드 중에 추가 할 때 문제가 발생하지 않도록 할 수 있습니다. 체크 박스를 선택하면 아이템 체크 이벤트 대신이 이벤트를 사용할 수 있습니다. 궁극적으로 아이디어는 부하가 걸리는 동안 그것을 엉망으로 만드는 것입니다.

내 앱에서 특정 OU에 존재하는 AD 그룹의 목록을 잡아 내고 있기 때문에 인덱스 번호가 무엇인지는 알 수 없습니다.

이것이 좋은 생각인지 아닌지는 상황에 따라 다릅니다. 비활성화 할 항목이 다른 설정에 종속되는 또 다른 앱이 있습니다. 이 응용 프로그램에서 나는 헬프 데스크가이 그룹이 필요하다는 것을 알기를 원합니다. 코드 아래

0

시도 :

Private Sub CheckedListBox1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles CheckedListBox1.MouseUp 
     If (Condition) Then 
     Me.CheckedListBox1.SelectedIndex = -1 
     End If 
End Sub 
0

나는 대체 솔루션이 Telerik 구성 요소를 사용하여 생각합니다. 이 게시물은 꽤 오래지만

enter image description here

4

, 마지막에 추가 답이
, 올해 월에 제출하고 나는이 사람을 도움이되기를 바랍니다되었습니다

RadListControl 당신에게 해당 옵션을 제공 할 수 있습니다. 같은 일부 기능이 필요하며 따라서 모두 장애인 점검 어디에 옵션의 목록을 제공하고 설치, 많은 행동 체크리스트 박스 :
나는 비슷한 후였다.
이 게시물 (Can I use a DrawItem event handler with a CheckedListBox?) 덕분에 나는 그것을 처리하여 CheckedListBox 컨트롤을 서브 클래 싱했습니다.
연결된 포스트 상태의 OP로 CheckedListBox 컨트롤에서 OnDrawItem 이벤트가 발생하지 않으므로 서브 클래 싱이 필요합니다.
매우 기본이지만 작동합니다. 이것은 (확인란을 위의 비교입니다) 모습입니다 :

checked list box

참고 : 그것을 클릭하면 ( 아무런 효과가 없습니다까지로 : 장애인 항목이 정말 사용할 수 입니다 나는 말할 수있다).

public class CheckedListBoxDisabledItems : CheckedListBox { 
    private List<string> _checkedAndDisabledItems = new List<string>(); 
    private List<int> _checkedAndDisabledIndexes = new List<int>(); 

    public void CheckAndDisable(string item) { 
     _checkedAndDisabledItems.Add(item); 
     this.Refresh(); 
    } 

    public void CheckAndDisable(int index) { 
     _checkedAndDisabledIndexes.Add(index); 
     this.Refresh(); 
    } 

    protected override void OnDrawItem(DrawItemEventArgs e) { 
     string s = Items[e.Index].ToString(); 

     if (_checkedAndDisabledItems.Contains(s) || _checkedAndDisabledIndexes.Contains(e.Index)) { 
      System.Windows.Forms.VisualStyles.CheckBoxState state = System.Windows.Forms.VisualStyles.CheckBoxState.CheckedDisabled; 
      Size glyphSize = CheckBoxRenderer.GetGlyphSize(e.Graphics, state); 
      CheckBoxRenderer.DrawCheckBox(
       e.Graphics, 
       new Point(e.Bounds.X + 1, e.Bounds.Y + 1), // add one pixel to align the check gliph properly 
       new Rectangle(
        new Point(e.Bounds.X + glyphSize.Width + 3, e.Bounds.Y), // add three pixels to align text properly 
        new Size(e.Bounds.Width - glyphSize.Width, e.Bounds.Height)), 
       s, 
       this.Font, 
       TextFormatFlags.Left, // text is centered by default 
       false, 
       state); 
     } 
     else { 
      base.OnDrawItem(e); 
     } 
    } 

    public void ClearDisabledItems() { 
     _checkedAndDisabledIndexes.Clear(); 
     _checkedAndDisabledItems.Clear(); 
     this.Refresh(); 
    } 
} 

이처럼 사용이 누군가를 도울 수

checkedListBox.Items.Add("Larry"); 
checkedListBox.Items.Add("Curly"); 
checkedListBox.Items.Add("Moe"); 

// these lines are equivalent 
checkedListBox.CheckAndDisable("Larry"); 
checkedListBox.CheckAndDisable(0); 

희망 는 그리고 이것은 코드입니다.

0

이 나를 위해 작동합니다 항목이 없음을 의미

checkedListBox1.SelectionMode = SelectionMode.None; 

를 선택할 수 있습니다

없음 : 항목을 선택할 수 없습니다.

자세한 내용은 여기에서 확인할 수 있습니다. SelectionMode Enumeration.

관련 문제