【解決方法】ドロップダウンの最後の項目に色を付けることはできますか?


こんにちは、みんな、

コンボ ドロップダウンの最後の項目を色付きでハイライト表示できますか?
必要なのは、コンボ ボックス (または簡単な場合はリスト ボックス) の最後の項目を強調表示することです。

私が試したこと:

ボックスに記入するには:

C#
for (int i = 0; i < 10; i++)
{
    cboTest.Items.Add(i.ToString());
}

ボックス内の最後のアイテムを取得するには

C#
cboTest.SelectedIndex = 9;

しかし、それはサイズを知る必要があることを意味するので、その変数ができるかどうかを確認することができます

C#
while (!((ArrayComPortsNames[index] == ComPortName) ||
                       (index == ArrayComPortsNames.GetUpperBound(0))));

GetUpperBound(0) は、cboTest.GetLowerBound() のような GetLowerBound() がないはずの最初の項目を取得しますか??

解決策 1

コンボにアイテムが 10 個あることをどうやって確認できますか? を使用する必要があります。 Count の財産 Items コレクション。 こうすることで、任意の数のエントリを保持でき、常に最後のエントリを確実に見つけることができます。 最後のカラーリングについては、こちらをご覧ください。ComboBoxRenderer クラス (System.Windows.Forms) Microsoft Learn[^]。

解決策 2

これをどのように解決するかは、色付きが何を意味するかによって異なります (ここでは Windows フォームを使用していると仮定しています)。 前景色を変更したい場合は、次のようなものを使用できます

C#
private void comboBox1_DrawItem(object sender, DrawItemEventArgs e)
{    
    e.DrawBackground();        
    ComboBox combobox = sender as ComboBox;

    string text = combobox.Items[e.Index].ToString();

    Brush brush;
    if (e.Index == combobox.Items.Length - 1) 
    {
        brush = Brushes.Red;
    }
    else
    {
        brush = Brushes.Black;
    }


    e.Graphics.DrawString(text, combobox.Font, brush, e.Bounds.X, e.Bounds.Y);
}

コメント

タイトルとURLをコピーしました