2009-05-13 15 views
2

コンボボックスにテンプレート名を入力するシナリオがあります。テンプレートの中にはデフォルトテンプレートがあります。コンボボックスに値を入力すると、デフォルトのテンプレート名が強調表示されます(その結果、アイテムのうちどれがデフォルトになっているかが分かります)。それは可能ですか?はいの場合はどうですか?私はC#2.0でWindowsフォームを使用しています。コンボボックス内の特定の項目の強調表示

答えて

8

項目を強調表示する方法に少し依存します。既定のアイテムのテキストを太字で表示する場合は、このようにすることができます(これを行うには、ComboBoxのDrawModeOwnerDrawFixedに設定し、DrawItemイベントをイベントハンドラに接続する必要があります) :

私はこのように定義され、テンプレートのオブジェクトとのコンボボックスを埋めています

private class Template 
{ 
    public string Name { get; set; } 
    public bool IsDefault { get; set; } 

    public override string ToString() 
    { 
     return this.Name; 
    } 
} 

...とDrawItemイベントは次のように実装されている:あなたが軌道に乗る必要があります

private void ComboBox_DrawItem(object sender, DrawItemEventArgs e) 
{ 
    if (e.Index < 0) 
    { 
     return; 
    } 
    Template template = comboBox1.Items[e.Index] as Template; 
    if (template != null) 
    { 

     Font font = comboBox1.Font; 
     Brush backgroundColor; 
     Brush textColor; 

     if ((e.State & DrawItemState.Selected) == DrawItemState.Selected) 
     { 
      backgroundColor = SystemBrushes.Highlight; 
      textColor = SystemBrushes.HighlightText; 
     } 
     else 
     { 
      backgroundColor = SystemBrushes.Window; 
      textColor = SystemBrushes.WindowText; 
     } 
     if (template.IsDefault) 
     { 
      font = new Font(font, FontStyle.Bold); 
     } 
     e.Graphics.FillRectangle(backgroundColor, e.Bounds); 
     e.Graphics.DrawString(template.Name, font, textColor, e.Bounds); 

    } 
} 

正しい方向、私希望。

+0

あなたのソリューションを実装しました。ありがとう、百万フレドリック!このコードは私には魔法のようでした:) –

0

コンボボックスのDrawMode = System.Windows.Forms.DrawMode.OwnerDrawVariableを設定します。そして、これを達成するために、 Combobox_MeasureItem()とCombobox_DrawItem()メソッドをオーバーライドします。

関連する問題