2012-09-11 2 views
2

나는 listview 내부에 도형을 그리는 소유자를 그려주는 listview를 만들고 있습니다. 나는 Listview_DrawItem 이벤트를 사용하여이 작업을 수행했습니다. 내 문제는 응용 프로그램을 실행할 때 listview에 그려진 도형을 선택할 수 없다는 것입니다.내 소유자가 그린 선택된 목록보기 컨트롤이 왜 표시되지 않습니까?

private void AddItem(ListView lvw, string Shape_name, Color Shape_color) 
    { 
     // Make the item. 
     ListViewItem item = new ListViewItem(Shape_name); 

     // Save the Shape object in the Tag property. 
     Shapes myShape = new Shapes(Shape_name,Shape_color); 

     item.Tag = myShape; 
     item.SubItems[0].Name ="ShapeName"; 

     // Add subitems so they can draw. 
     item.SubItems.Add("ShapeColor"); 

     // Add the item to the ListView. 
     lvw.Items.Add(item); 
    } 


    // Draw the item. In this case, the Shape_name's logo. 
    private void lvwServers_DrawItem(object sender, DrawListViewItemEventArgs e) 
    { 

     // Get the ListView item and the Shapes object. 
     ListViewItem item = e.Item; 

     Shapes myShape = item.Tag as Shapes; 

     // Clear. 
     e.DrawBackground(); 

     // Smoothing mode for blur free drawing 
     e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; 

     Rectangle rect = new Rectangle(e.Bounds.Left + 10, e.Bounds.Top + 10, 41, 41); 


     using (SolidBrush br = new SolidBrush(myShape.ShapeColor)) 
     { 

      e.Graphics.FillRectangle(br, rect); 
     } 

     e.Graphics.DrawRectangle(Pens.Black, rect); 

     e.Graphics.ResetTransform(); 
     e.DrawFocusRectangle(); 

또한 e.bound 속성 값을 변경할 수 없습니다.

+0

'e.Bounds'는 변경할 수 없으며 항목의 경계를 알려주는 읽기 전용 속성입니다. 또한 '도형을 선택할 수 없습니다'라는 것은 무엇을 의미합니까? 당신이 그들을 선택하면 어떻게됩니까? 그들이 선택되지 않았다는 것을 어떻게 알 수 있습니까? – Rotem

+0

로템이 말한 것에 대해 자세히 설명하기 위해 개별 항목의 상태를 처리하지 않으므로 항목을 선택하고 있지만 그리지 않은 상태에서 효과를 볼 수는 없습니다. 선택이 자동으로 일어나지 않으므로 그려야합니다. –

+0

'SelectEntireRow' 속성을'true'로 설정 했습니까? – ja72

답변

2

DrawListViewItemEventArgs 매개 변수에서 사용할 수있는 e.State 값에 따라 DrawItem 이벤트 처리기의 드로잉 코드를 기반으로 할 수 있습니다.

이렇게하면 항목을 선택하면 그려지는 항목의 요소를 변경할 수 있습니다.

+1

이것은 좋은 형태가 아닙니다. 상태에는 두 개 이상의 플래그가 설정 될 수 있습니다. 올바른 구문은'e.State.HasFlag (ListViewItemStates.Selected)'입니다. –

관련 문제