1

これは、listBox 内の項目を描画して色を付けるクラスです。機能はColorListBox. フォント サイズ 8 を使用している場合は問題ないように見えますが、フォント サイズ 20 を使用している場合、listBox 内の項目が互いに重なり合っています。それらの間にスペースはありません。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Windows.Forms;

namespace GatherLinks
{
    class ColorText
    {   
        public static void Texts(RichTextBox box, string text, Color color)
        {
            box.SelectionStart = box.TextLength;
            box.SelectionLength = 0;

            box.SelectionColor = color;
            box.AppendText(text);
            box.SelectionColor = box.ForeColor;
        }

        public static void ColorListBox(List<string> data, DrawItemEventArgs e)
        {
            string strLeft = null;
            string strMid = "---";
            string strRight = null;

            if (data[e.Index].Contains(strMid))
            {
                int index = data[e.Index].IndexOf(strMid);
                strLeft = data[e.Index].Substring(0, index);
                strRight = data[e.Index].Substring(index + strMid.Length);
            }

            using (Font f = new Font(FontFamily.GenericSansSerif, 20, FontStyle.Regular))
            {
                float startPos;
                e.Graphics.DrawString(strLeft, f, Brushes.Red, e.Bounds.X, e.Bounds.Y);
                startPos = e.Graphics.MeasureString(strLeft, f).Width;
                e.Graphics.DrawString(strMid, f, Brushes.Black, e.Bounds.X + startPos, e.Bounds.Y);
                startPos = e.Graphics.MeasureString(strLeft + strMid, f).Width;
                e.Graphics.DrawString(strRight, f, Brushes.Green, e.Bounds.X + startPos, e.Bounds.Y);

            }
        }
    }
}

これは、サイズ 20 の場合のイメージです。

ここに画像の説明を入力

4

3 に答える 3

1

ListBox 内の項目を自分で描画してみてください。

ListBox の DrawMode プロパティを OwnerDrawVariable に設定します。Designer またはコードを介してこれを行います。

myListBox.DrawMode = DrawMode.OwnerDrawVariable;

DrawItem と MeasureItem の ListBox イベントを設定します。Designer またはコードを介してこれを行います。

myListBox.DrawItem += new DrawItemEventHandler(DrawItem);
myListBox.MeasureItem += new MeasureItemEventHandler(MeasureItem);

これにより、ListBox 内の各項目に対して DrawItem および MeasureItem イベントが発生するたびに通知を受けることができます。

リッスンしているイベントのイベント ハンドラーを追加します。これらは、デザイナーを介して追加した場合、自動的に入力されます。

private void DrawItem(object sender, DrawItemEventArgs e)
{
    e.DrawBackground();
    e.DrawFocusRectangle();

    // You'll change the font size here. Notice the 20
    e.Graphics.DrawString(data[e.Index],new Font(FontFamily.GenericSansSerif, 20, FontStyle.Bold), new SolidBrush(color[e.Index]),e.Bounds);
}

private void MeasureItem(object sender, MeasureItemEventArgs e)
{
    // You may need to experiment with the ItemHeight here..
    e.ItemHeight = 25;
}
于 2013-03-06T17:47:20.157 に答える
1

試す、

listbox1.IntegralHeight=false; // where listbox1 is your listbox's ID
listbox1.Height=some_int_number;
于 2013-03-06T17:40:38.923 に答える
1

私は同じ問題に遭遇しました。

私を助けたのは、フォントサイズを大きくした後に ListBox.ItemHeight プロパティを大きくすることです。

于 2019-08-05T18:48:06.267 に答える