2015-01-11 2 views
0

4 번째 열이 선택되지 않은 이유는 무엇입니까? 나는 listView3_DrawSubItem과 e.DrawDefault = true를 사용한다; 해당 열에 대해서는 선택할 수 없습니다.ListView drawsubitem - 열이 선택되지 않았습니다.

Selection

편집 : listView1_DrawSubItem 코드 :

 // Only interested in 2nd column. 
     if (e.Header != this.action) 
     { 
      e.DrawDefault = true; 
      return; 
     } 
     drawItem(e); 

그리고 drawitem 코드 :

 string drawString = e.SubItem.Text; 
     float size = 8.25F; 

     e.DrawBackground(); 

     Bitmap image = new Bitmap(DesktopCleaner.Properties.Resources.folder_icon_512x512); 

     if (drawString == "Leave on Desktop") 
     { 
      image = new Bitmap(DesktopCleaner.Properties.Resources.desk); 

     } 
     else if (drawString == "Recycle") 
     { 
      image = new Bitmap(DesktopCleaner.Properties.Resources.recyclebin_preview_1); 

     } 
     else if (drawString == "Delete") 
     { 
      image = new Bitmap(DesktopCleaner.Properties.Resources.free_vector_delete_icon_101805_Delete_icon); 

     } 

     var imageRect = new Rectangle(e.Bounds.X + 3, e.Bounds.Y, image.Width - 2, image.Height - 2); 
     e.Graphics.DrawImage(image, imageRect); 

     System.Drawing.Font drawFont = new System.Drawing.Font(listView1.Font.FontFamily, size, FontStyle.Bold); 
     System.Drawing.SolidBrush drawBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Black); 

     System.Drawing.StringFormat drawFormat = new System.Drawing.StringFormat(); 
     var strrect = new Rectangle(e.Bounds.X + 18, e.Bounds.Y + 3, 150, e.Bounds.Height); 
     e.Graphics.DrawString(drawString, drawFont, drawBrush, strrect, drawFormat); 
+0

아마 선택되었지만 보이지 않습니다. 선택을 어떻게 그려야합니까? e.DrawDefault = true이면 아이콘은 어디에서 왔습니까? 'DrawSubItem' 코드를 보여줄 수 있습니까? – TaW

+0

방금 ​​질문을 업데이트했습니다. –

+1

e.ItemState를 무시합니다. 하지마. –

답변

2

당신은 선택을 그리기에 대한 책임이 있습니다.

당신이 좋은 방법을 사용 그래서 경우에도 : 어떤 선택이 그려지지되고

e.DrawBackground(); 
e.DrawText(); 

합니다.

그래서 당신은 아마 다음과 같이 적절한 ColorsFillRectangleDrawString를 사용해야합니다 :

bool selected = e.Item.Selected; 
using (SolidBrush backBrush = new SolidBrush( 
     selected? SystemColors.MenuHighlight :SystemColors.Window)) 
    e.Graphics.FillRectangle(backBrush, e.Bounds); 
using (SolidBrush textBrush = new SolidBrush(
     selected ? Color.White : Color.Black  )) 
    e.Graphics.DrawString(e.Item.Text, yourFont, textBrush, e.Bounds.X, e.Bounds.Y); 

코드는 간단 해집니다; 당신은 당신의 코디네이트를 사용하여 아이콘을위한 자리를 마련 할 것입니다.

+0

고맙습니다, :) –

관련 문제