2015年3月25日水曜日

[C#][.NET]Listboxで奇数行に背景色をつける

ListBoxの奇数行の背景色を変える

ListBox.DrawModeプロパティを OwnerDrawFixedにする。

ListBox.DrawItemイベントに以下を追加する。


        private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
        {
            var idx = e.Index;                                                      //描画対象の行
            if (idx == -1) return;                                                  //範囲外なら何もしない
            var sts = e.State;                                                      //セルの状態
            var fnt = e.Font;                                                       //フォント
            var _bnd = e.Bounds;                                                    //描画範囲(オリジナル)
            var bnd = new RectangleF(_bnd.X, _bnd.Y, _bnd.Width, _bnd.Height);      //描画範囲(描画用)
            var txt = (string)listBox1.Items[idx];                                  //リストボックス内の文字
            var bsh = new SolidBrush(listBox1.ForeColor);                           //文字色
            var sel = (DrawItemState.Selected == (sts & DrawItemState.Selected));   //選択行か
            var odd = (1 == idx % 2);                                               //奇数行か
            var bak = Brushes.Gold;                                                 //奇数行の背景色

            e.DrawBackground();                                                     //背景描画

            //奇数項目の背景色を変える(選択行は除く)
            if (odd && !sel)
            {
                e.Graphics.FillRectangle(bak, bnd);
            }

            //文字を描画
            e.Graphics.DrawString(txt, fnt, bsh, bnd);
        }



コメントを投稿

Androider