2015-01-11 2 views
0

Почему столбец 4` не выбран? Я использую listView3_DrawSubItem и e.DrawDefault = true; для этого столбца и теперь не выбирается.ListView drawsubitem - столбец не выбран

Selection

Edit: Код 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(); 

выбора не втягивается.

Таким образом, вы должны использовать FillRectangle и DrawString с соответствующим Colors, может быть, как это:

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); 

код упрощается; вы будете использовать свои coodinates, чтобы освободить место для значков и т. д.

+0

Спасибо, рабочий :) –

Смежные вопросы