我在這裏有一個奇怪的問題,我的組合框將其樣式從DropDownList
更改爲DropDown
,只在視覺上。檢查我的組合框的DropDownStyle
屬性顯示其設置爲DropDownList
。組合框手動繪製項目時改變樣式
基本上這裏就是我在做什麼:
void InitComponents()
{
ddlInterval.DrawMode = DrawMode.OwnerDrawFixed;
ddlInterval.DrawItem += new DrawItemEventHandler(DrawIntervalItems);
List<IntervalItem> backupIntervalsList = new List<IntervalItem>();
IntervalsList.Add(new IntervalItem(5, GetIntervalString(5)));
IntervalsList.Add(new IntervalItem(15, GetIntervalString(15)));
IntervalsList.Add(new IntervalItem(30, GetIntervalString(30)));
IntervalsList.Add(new IntervalItem(60, GetIntervalString(60)));
IntervalsList.Add(new IntervalItem(120, GetIntervalString(120)));
IntervalsList.Add(new IntervalItem(240, GetIntervalString(240)));
IntervalsList.Add(new IntervalItem(480, GetIntervalString(480)));
IntervalsList.Add(new IntervalItem(720, GetIntervalString(720)));
IntervalsList.Add(new IntervalItem(1440, GetIntervalString(1440)));
ddlInterval.DataSource = IntervalsList;
ddlInterval.DisplayMember = "Name";
ddlInterval.ValueMember = "Value";
}
void DrawIntervalItems(object sender, DrawItemEventArgs e)
{
if(_bDisableItems)
{
switch (e.Index)
{
case 5:
case 7:
case 8:
{
string s = ddlInterval.GetItemText(ddlInterval.Items[e.Index]);
e.DrawBackground();
e.Graphics.DrawString(s, ddlInterval.Font, Brushes.Black, e.Bounds);
}
break;
default:
{
string s = ddlInterval.GetItemText(ddlInterval.Items[e.Index]);
e.Graphics.FillRectangle(SystemBrushes.Window, e.Bounds);
e.Graphics.DrawString(s, ddlInterval.Font, Brushes.LightSlateGray, e.Bounds);
}
break;
}
}
}
這裏是一個展示我的兩個組合框之間的差異的圖像。需要注意的是兩者各有DropDownStyle
設置爲DropDownList
但只有在底部的人都有項目手動繪製:
有沒有辦法來解決這個問題?
您可以利用的['ComboBoxRenderer'](http://msdn.microsoft.com/en -us/library/system.windows.forms.comboboxrenderer.aspx)類來正確繪製控件。確保首先檢查'Application.RenderWithVisualStyles'。 (編輯:更好的是,檢查'ComboBoxRenderer.IsSupported'作爲代碼示例。我忽略了此屬性。) – JosephHirn 2013-05-07 13:10:53