2014-05-13 222 views
0

我想知道是否可以創建組合框(下拉列表)並在下拉列表中繪製特定的單元格。 所以,如果我有五個項目在下拉列表中,第二個項目和最後一個項目將被繪成藍色,例如灰色的其他。 是否有可能?組合框 - 下拉列表

System.Windows.Forms.ComboBox comboBox; 
comboBox = new System.Windows.Forms.ComboBox(); 
comboBox.AllowDrop = true; 
comboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; 
comboBox.FormattingEnabled = true; 
comboBox.Items.AddRange(excel.getPlanNames()); 
comboBox.Location = new System.Drawing.Point(x, y); 
comboBox.Name = "comboBox1"; 
comboBox.Size = new System.Drawing.Size(sizeX, sizeY); 
comboBox.TabIndex = 0; 
group.Controls.Add(comboBox); 

感謝的任何幫助..

+1

[Microsoft在MSDN幫助中提供了一個示例](http://msdn.microsoft.com/en-us/library/system.windows.forms.combobox.drawitem%28v=vs.110%29.aspx) –

回答

2

可以使用DrawItem事件。

首先你要設置的DrawModeComboBoxOwnerDrawFixed

然後,設置DrawItem爲類似以下內容:

private void comboBox1_DrawItem(object sender, DrawItemEventArgs e) 
{ 
    Font font = (sender as ComboBox).Font; 
    Brush backgroundColor; 
    Brush textColor; 

    if (e.Index == 1 || e.Index == 3) 
    { 
     if ((e.State & DrawItemState.Selected) == DrawItemState.Selected) 
     { 
      backgroundColor = Brushes.Red; 
      textColor = Brushes.Black; 
     } 
     else 
     { 
      backgroundColor = Brushes.Green; 
      textColor = Brushes.Black; 
     } 
    } 
    else 
    { 
     if ((e.State & DrawItemState.Selected) == DrawItemState.Selected) 
     { 
      backgroundColor = SystemBrushes.Highlight; 
      textColor = SystemBrushes.HighlightText; 
     } 
     else 
     { 
      backgroundColor = SystemBrushes.Window; 
      textColor = SystemBrushes.WindowText; 
     } 
    } 
    e.Graphics.FillRectangle(backgroundColor, e.Bounds); 
    e.Graphics.DrawString((sender as ComboBox).Items[e.Index].ToString(), font, textColor, e.Bounds); 
} 

這個例子將默認的背景顏色綠色,黑色文本,並且突出顯示的項目將具有索引1和3處的項目的紅色背景和黑色文本。

您還可以設置ind的字體使用font變量的單個項目。

+1

救了我..非常感謝你:))) –