2011-03-12 4 views
1

동적 checklistbox에서 이벤트를 실행하는 동안 checklistbox의 checkeditem을 전달해야합니다. 코드 스 니펫은 주석과 함께 아래에 제공됩니다 ... 동일한 코드 조각에 문제가 있습니다. 마우스 더블 클릭 이벤트에서 그것의 예외를 던지는 IndexoutofRange. 그것의 인덱스 값 0. 잘 도와주세요 2 날 둘 다 해결하는 데 도움이됩니다.이벤트를 실행하는 동안 텍스트를 전달하는 방법은 무엇입니까?

private void clbTables_MouseDoubleClick(object sender, MouseEventArgs e) 
{ 
    int indexofselectedtable; 
    indexofselectedtable = Convert.ToInt32(clbTables.SelectedIndex); 
    if (clbTables.CheckedItems.Count != 0) 
    { 
     Metadata metadataobj = new Metadata(dbProperties); 
     DBList = metadataobj.GetColumns(clbTables.CheckedItems[indexofselectedtable].ToString()); // This throws an error on checking an item of index>0. 

     for (int j = 0; j < DBList.Count; j++) 
     { 
      chklistcolumns.Name = "chklist" + j++; 
      chklistcolumns.Items.Add(DBList.ElementAt(j)); 
     } 
     this.Controls.Add(chklistcolumns); 

     chklistcolumns.ItemCheck += new ItemCheckEventHandler(OnCheckListBoxItemCheck); 
    } 
} 

private void OnCheckListBoxItemCheck(object sender, ItemCheckEventArgs args) //need to pass the tablename which can be got from the object clbTables 
{ 
    Columns columnobj = new Columns(); 
    columnobj.ColumnName = this.Text; 
    columnobj.Id = this.Name; 
    columnobj.TableName= // need to get the tablename from the object clbtables 
} 
+0

clbTables.CheckedItems -이 속성에서 반환하는 개체 유형입니다. checklistbox에서 여러 항목을 검사 할 수 있습니까? 그렇지 않은 경우 목록 길이는 항상 1입니다. 즉, 인덱스 0 만 유효한 조회입니다. 아마도 SelectedIndex에 의해 키 입력 할 필요가 없습니다. – Gishu

+0

clbTables.CheckedItems는 목록을 반환합니다. 때로는 하나 이상의 요소를 확인할 수 있습니다. 심지어 같은 코드를 사용하여 6 개의 항목을 선택했습니다. 그러나 중간에 Indexoutofbound 예외가 발생합니다. – NewBie

답변

0

나는 내가 여기에 문제가, 당신은 CheckedItems 컬렉션의 인덱스로 CheckedListBox의 선택된 인덱스를 일치 시키려면 무엇을 볼 생각하지만, 그것은 그런 식으로 작동하지 않습니다.

다음을 고려하십시오. CheckedListBox에 10 개의 항목이 있고 그 중 3 개가 확인됩니다. 그건 당신에게 주어집니다. [10] 그리고 .CheckedItems [3]. CheckedListBox의 7 번째 항목을 두 번 클릭하면 SelectedIndex는 6이되지만 CheckedItems 컬렉션에는 세 개의 항목 만있게됩니다. 따라서 clbTables.CheckedItems [6]을 읽으려고하면 그 콜렉션 범위를 벗어납니다.

0

clbTables.CheckedItems은 다른 모음입니다. 그것에 clbTables.SelectedIndex을 사용할 수 없습니다.

SelectedValue 속성을 사용하지 않으시겠습니까?

+0

저는 checklistbox에 항목을 추가하는 중입니다. 결과적으로 값을 할당하지 않았습니다. 따라서 내가 선택한 값은 항상 null입니다. 이 코드와 함께 어떻게 할 수 있습니까? clbTables.Items.Add (TableList.ElementAt (i)); – NewBie

관련 문제