2013-04-19 2 views
0

나는 각 항목 사이에 빈 줄이있는 여러 항목이있는 listBox가 있습니다.ListBox에서 빈 줄 선택 해제

item1 

item2 

item3 

(이유는 몇 가지 항목이 많아서 IMO가 훨씬 멋지게 보입니다.) 내가 그렇게 사용자가 빈 줄 중 하나를 선택할 수 있도록 할

, 나는 MOUSE_DOWN 이벤트

if (listBox1.SelectedItem.ToString() == "") 
      listBox1.SelectedItems.Clear(); 

을했지만, 나는이 추한 깜박임 효과를 얻고, 위의하지 않습니다 사용자가 실제 항목을 선택하고 화살표 키를 사용하여 스크롤 할 때 작동합니다.

편집 listBox 항목 간의 세로 간격을 조정하는 방법이 있습니까? 그게 전부입니다 (빈 공간을 제거 할 수 있습니다)

+1

간격을두기 위해 빈 줄을 추가하고 있습니까? 그렇다면 ListBox의 행에 대한 ItemTemplate에 0,0,28,0 정도의 상자 주위에 여백이있을 수 있습니다. 이렇게하면 현재 시각 효과를 유지하면서 하단에 여분의 간격 만 갖게됩니다. 공백을 넣으려는 목록에 빈 줄을 추가하는 것을 피할 수 있습니다. –

+0

네, 그게 유일한 이유입니다 .. ItemTemplate 속성이 표시되지 않습니다. 그 이름입니까? 나는 "Margin"으로 엉망 이었지만 수직 간격을 바꾸지 않았다. – Abraham

+0

Winforms 또는 WPF 질문인지 확인하기 어렵습니다. WinForms 솔루션은 단순한 대신 ListView를 사용합니다. Groups 속성을 지원하기 때문에 선택되지 않은 그룹 헤더가 포함 된 항목을 그룹화 할 수 있습니다. –

답변

1

모든 항목의 줄 높이를 정의하려면 ListBox.ItemHeight 속성을 사용할 수 있습니다. 따라서 DrawMode를 OwnerDrawFixed 또는 OwnerDrawVariable로 설정하고 DrawItem 이벤트를 처리해야합니다.

private void listBox1_DrawItem(object sender, DrawItemEventArgs e) 
     { 
      if (listBox1.Items.Count > 0) 
      { 
       if ((e.State & DrawItemState.Selected) == DrawItemState.Selected) 
        e.Graphics.FillRectangle(SystemBrushes.Highlight, e.Bounds); 
       else 
        e.Graphics.FillRectangle(SystemBrushes.Window, e.Bounds); 

       string text = listBox1.Items[e.Index].ToString(); 

       e.Graphics.DrawString(text, e.Font, Brushes.Black, e.Bounds.Left, e.Bounds.Top);     
      } 
     } 
+0

각 항목을 다르게 설정할 필요는 없습니다. ListBox.ItemHeight를 여러 다른 값으로 설정하려고했지만 아무 것도 변경하지 않았습니다. – Abraham

+0

당신이 옳습니다. 죄송합니다. 내 대답을 편집하고 작업 코드를 추가했습니다. – wonko79

+0

완벽하게 작동합니다. 정말 고맙습니다! – Abraham