2009-11-24 13 views

答えて

7

を使用して独自のコンボボックスを作成してあなたが手動DrawItemイベントを使用してアイテムを描画することを可能にするOwnerDrawFixedDrawModeを設定することによってこれを行うことができます。

comboBox1.DrawMode = DrawMode.OwnerDrawFixed; 
comboBox1.DrawItem += new DrawItemEventHandler(comboBox1_DrawItem); 

private void comboBox1_DrawItem(object sender, DrawItemEventArgs e) {  
    Font font = comboBox1.Font; 
    Brush brush = Brushes.Black; 
    string text = comboBox1.Items[e.Index]; 

    if (you want bold) 
     font = new Font(font, FontStyle.Bold); 

    if (you want green) 
     brush = Brushes.Green; 

    e.Graphics.DrawString(text, font, brush, e.Bounds); 
} 
0

いいえ、それを行うための組み込みプロパティはありません。独自のコントロールを作成し、レンダリングをオーバーライドする必要があります。

11

このポストと同じくらい古くから、私はそれを検索の出発点として有用だが、@Paulで示された方法hereでより良い結果を得た。

コンボボックス内のアイテムを条件付きで太字で表示するコードは次のとおりです。この質問に正しい答えが表示されるのは、奇妙な動作をしていることです。アイテム上にカーソルを合わせると、それが再描画されている場合。より自然な表情でこのコードの結果:

private void ComboBox1_DrawItem(object sender, DrawItemEventArgs e) 
     { 
      if (e.Index == -1) 
       return; 
      ComboBox combo = ((ComboBox)sender); 
      using (SolidBrush brush = new SolidBrush(e.ForeColor)) 
      { 
       Font font = e.Font; 
       if (/*Condition Specifying That Text Must Be Bold*/) 
        font = new System.Drawing.Font(font, FontStyle.Bold); 
       e.DrawBackground(); 
       e.Graphics.DrawString(combo.Items[e.Index].ToString(), font, brush, e.Bounds); 
       e.DrawFocusRectangle(); 
      } 

     } 
2

ただ、ダンから供給された答えに追加する、というだけのプレーンな文字列を含むコンボボックスを持つよりも、あなたがデータソースにリストをバインドしている場合ことを忘れないでくださいcombo.Items[e.Index].ToString()を使用してエントリを再描画することはできません。

たとえば、ComboBoxをDataTableにバインドして、Danの答えでコードを使用しようとすると、リストの各項目は、System.Data.DataRowViewを含むコンボボックスで終了します。それはDataRowViewです。

この場合のコードは次のようになります。"DisplayMember"は(ComboBox1.DisplayMemberプロパティで設定)リストに表示されるフィールドの名前です

private void ComboBox1_DrawItem(object sender, DrawItemEventArgs e) 
      { 
       if (e.Index == -1) 
        return; 
       ComboBox combo = ((ComboBox)sender); 

       using (SolidBrush brush = new SolidBrush(e.ForeColor)) 
       { 
        Font font = e.Font; 
        DataRowView item = (DataRowView)combo.Items[e.Index]; 

        if (/*Condition Specifying That Text Must Be Bold*/) { 
         font = new System.Drawing.Font(font, FontStyle.Bold); 
        } 
        else { 
         font = new System.Drawing.Font(font, FontStyle.Regular); 
        }      

        e.DrawBackground(); 
        e.Graphics.DrawString(item.Row.Field<String>("DisplayMember"), font, brush, e.Bounds); 
        e.DrawFocusRectangle(); 
       } 

      } 

関連する問題