2012-12-02 60 views

回答

10

設置你的ListBox DrawModeOwnerDrawFixed和訂閱DrawItem事件:

private void listBox_DrawItem(object sender, DrawItemEventArgs e) 
{ 
    e.DrawBackground(); 
    Graphics g = e.Graphics; 
    Brush brush = ((e.State & DrawItemState.Selected) == DrawItemState.Selected) ? 
        Brushes.Red : new SolidBrush(e.BackColor); 
    g.FillRectangle(brush, e.Bounds); 
    e.Graphics.DrawString(listBox.Items[e.Index].ToString(), e.Font, 
      new SolidBrush(e.ForeColor), e.Bounds, StringFormat.GenericDefault); 
    e.DrawFocusRectangle();    
} 

您可以通過檢查事件參數的e.State屬性來確定繪圖項目的狀態。如果狀態爲Selected,則使用您喜歡的任何筆刷(例如紅色)填充項目線。

+1

+1。有趣的方法。出於某種原因,我看到這些物品略微偏向預期矩形的底部。可以將我的自定義dpi設置爲125%嗎? – Neolisk

+1

我和Neolisk有同樣的問題。 +1 tho –

+0

通過將「listBox」更改爲((ListBox)sender),可以將其用於多個列表框。也就是說,此方法的發件人是需要繪製項目的列表框。 – JohnT

4

編輯之前。(他會問到ListView控件不是列表框)

ObjectListView:

ListView1.UseCustomSelectionColors = true; 
ListView1.HighlightBackgroundColor = Color.Red; // for example :) 
ListView1.UnfocusedHighlightBackgroundColor = Color.Red; 

的ListView:

myitem.BackColor = Color.Red; 
+0

是Neolis,我編輯了我的答案 – Obama

+0

請注意,設置ListView項目的BackColor並不能解決OP詢問的選擇顏色問題。 – Neolisk

+0

我真的很抱歉,我遇到了listbox,而不是listview – Oztaco