2013-05-07 43 views
2

我在這裏有一個奇怪的問題,我的組合框將其樣式從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但只有在底部的人都有項目手動繪製:

Difference between comboboxes

有沒有辦法來解決這個問題?

+0

您可以利用的['ComboBoxRenderer'](http://msdn.microsoft.com/en -us/library/system.windows.forms.comboboxrenderer.aspx)類來正確繪製控件。確保首先檢查'Application.RenderWithVisualStyles'。 (編輯:更好的是,檢查'ComboBoxRenderer.IsSupported'作爲代碼示例。我忽略了此屬性。) – JosephHirn 2013-05-07 13:10:53

回答

0

試試這個代碼:的

ddlInterval.DrawMode = DrawMode.Normal; 

代替:

ddlInterval.DrawMode = DrawMode.OwnerDrawFixed; 
+0

如果將drawMode設置爲normal,則DrawItem事件不會被提升 – 2013-05-07 09:34:27

+0

您只爲ddlBackupInterval.not設置DrawItem事件爲ddlInterval? – 2013-05-07 10:01:09

+0

對不起,這是一個錯字,ddlBackupInterval和ddlInterval是一個相同的 – 2013-05-07 10:16:39