2011-08-23 3 views
0

다음 코드를 사용하여 ListBox 내의 각 목록 항목을 재정의하고 그립니다.어떻게 ListBox의 드롭 다운 영역에 테두리를 추가 할 수 있습니까?

 if (e.Index < 0) return; 
     // if the item state is selected then change the back color 
     if ((e.State & DrawItemState.Selected) == DrawItemState.Selected) 
      e = new DrawItemEventArgs(e.Graphics, 
             e.Font, 
             e.Bounds, 
             e.Index, 
             e.State^DrawItemState.Selected, 
             e.ForeColor, 
             Color.Red); // Choose the color 

     // Draw the background of the ListBox control for each item. 
     e.DrawBackground(); 
     // Draw the current item text 
     e.Graphics.DrawString(studentsListBox.Items[e.Index].ToString(), e.Font, Brushes.Black, e.Bounds, StringFormat.GenericDefault); 
     // If the ListBox has focus, draw a focus rectangle around the selected item. 
     e.DrawFocusRectangle(); 

코드는 내가 생각하는 것처럼, 그러나 나는 또한 목록 상자의 전체 드롭 다운 부분에 테두리를 추가 할 작품이다 (아래 예제 이미지를 참조하십시오.) 나는 국경을 추가 할 수있는 방법 전체 목록에? 제목이 경계를 참조하기 때문에

enter image description here

+0

두 가지 질문을하고 있습니다. 어떻게 드롭 다운 목록에 테두리를 그릴 수 있으며 목록의 각 요소 모양을 어떻게 수정할 수 있습니까? 질문의 성격을 반영하여 질문을 업데이트하거나 두 가지 별도의 SO 질문을하십시오. 고맙습니다. – RLH

+0

@RLH 제 질문을 수정 해 주시겠습니까?이 질문에 답해 주시겠습니까? –

답변

2

, 그에 초점을 맞출 것입니다. 주어진 "None", "FixedSingle"및 "Fixed3D"너머로 BorderStyle을 변경하려고한다고 가정합니다.

목록 상자는

가장 좋은 방법은이 BorderStyle to "None", IntegralHeight = FalseDock = Fill, 다음 패널 내부에 배치 변경 변경하는 등, BorderColors의 어떤 종류를 지원하지 않습니다.

패널의 경우 BorderStlye = None, Padding (All) = 2, BackColor = Red을 변경하십시오.

WinForms를 사용하면 선택 사항이 제한됩니다.

+0

thanq larstech님께 ... –

+0

하나 더 질문합니다. 그림과 제목에 표시된 데이터를 추가하고 싶습니다 .... 어떻게 할 것인가? 그게 당신에게 어떤 생각을 주겠습니까 .... –

+0

@ user899271 당신은 이미 DrawString을 사용하여, 머리글 항목에 대한 글꼴을 굵게 변경하고 귀하의 하위 항목에 대한 오른쪽 들여 쓰기로 e.Bounds 사각형을 변경하십시오. 목록 상자 대신 TreeView처럼 보입니다. 아마도 그 컨트롤을 대신 사용해보십시오. – LarsTech

관련 문제