首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

listbox展示字体的颜色

2012-09-09 
listbox显示字体的颜色我想要显示这样的效果:listbox1.Items.Add(成功) 要求成功字体的颜色为蓝色listb

listbox显示字体的颜色
我想要显示这样的效果:
listbox1.Items.Add("成功"); 要求成功字体的颜色为蓝色
listbox1.Items.Add("失败"); 要求失败字体的颜色为红色
能否作到?

[解决办法]

探讨
引用:
winfrom

ForeColor属性可以更改


winfrom的

如果用ForeColor属性,只能用一种颜色吧?

[解决办法]
用DrawItem自己画.
参考:
private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
{

string s=this.listBox1.Items[e.Index].ToString();
Brush b;
switch (s)
{
case "成功":
b = new SolidBrush(Color.Blue);
break;
case "失败":
b = new SolidBrush(Color.Red);
break;
default:
b = new SolidBrush(this.ForeColor);
break;
}
e.Graphics.DrawString(s, this.Font, b, e.Bounds);

}
[解决办法]
字节写DrawItem方法。
C# code
public partial class Form2 : Form    {        public Form2()        {            InitializeComponent();            listBox1.DrawMode = DrawMode.OwnerDrawFixed;//设置ListBox中每一项都手动绘制            listBox1.Items.Add("成功");            listBox1.Items.Add("失败");            listBox1.Items.Add("事业");            listBox1.Items.Add("成仁");        }        //绘制ListBox项的方法        private void listBox1_DrawItem(object sender, DrawItemEventArgs e)        {            listBox1.DrawMode = DrawMode.OwnerDrawFixed;            e.DrawBackground();            Brush myBrush = Brushes.Black;            switch (listBox1.Items[e.Index].ToString())            {                case "成功":                    myBrush = Brushes.Blue;                    Console.WriteLine(listBox1.Items[e.Index].ToString());                    break;                case "失败":                    myBrush = Brushes.Red;                    Console.WriteLine(listBox1.Items[e.Index].ToString());                    break;                default:                    myBrush = Brushes.Purple;                    Console.WriteLine(listBox1.Items[e.Index].ToString());                    break;            }            e.Graphics.DrawString(listBox1.Items[e.Index].ToString(), e.Font, myBrush, e.Bounds, StringFormat.GenericDefault);            e.DrawFocusRectangle();        }    }
[解决办法]
设置listbox.DrawMode属性为OwnerDrawFixed
然后添加listbox到drawitem事件
在里面选择哪个item颜色自己设置
 private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
{
listBox1.DrawMode = DrawMode.OwnerDrawFixed;
// Draw the background of the ListBox control for each item.
e.DrawBackground();
// Define the default color of the brush as black.
Brush myBrush = Brushes.Black;

// Determine the color of the brush to draw each item based on the index of the item to draw.
switch (e.Index)
{
case 0:
myBrush = Brushes.Red;
break;
case 1:
myBrush = Brushes.Orange;
break;
case 2:
myBrush = Brushes.Purple;
break;
}

// Draw the current item text based on the current Font and the custom brush settings.
e.Graphics.DrawString(listBox1.Items[e.Index].ToString(), e.Font, myBrush, e.Bounds, StringFormat.GenericDefault);


// If the ListBox has focus, draw a focus rectangle around the selected item.
e.DrawFocusRectangle();

}
[解决办法]

探讨
用DrawItem自己画.
参考:
private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
{

string s=this.listBox1.Items[e.Index].ToString();
Brush b;
switch (s)
{
case "成功":
b = new SolidBrush(Color.Blue);
break;
case "失败":


[解决办法]
探讨
To ericzhangbo1982111

你的方法会可行点,因为可以设置奇,偶行颜色不一样

也谢谢周公,

但能否实现以下显示:

listbox1.Items.Add("第一次成功"); 要求成功字体的颜色为蓝色,第一次默认不变
listbox1.Items.Add("第一次失败"); 要求失败字体的颜色为红色,第一次默认不变

[解决办法]
分层绘制,先绘制背景,再绘制各层关键词颜色,参考如下代码:
C# code
private void Form1_Load(object sender, EventArgs e){    listBox1.Items.Add("第一次成功、第二次失败");    listBox1.Items.Add("第三次失败。");    listBox1.Items.Add("第四次未知");}private KeyColor[] keyColors = new KeyColor[] {     new KeyColor("成功", Color.Blue),     new KeyColor("失败", Color.Red),     new KeyColor("未知", Color.Green) };private void listBox1_DrawItem(object sender, DrawItemEventArgs e){    e.DrawBackground();    Brush brush = new SolidBrush(e.ForeColor);    string itemText = listBox1.Items[e.Index].ToString();    string backText = itemText;    foreach (KeyColor keyColor in keyColors)        backText = backText.Replace(keyColor.key, new string(' ', keyColor.key.Length));    if (string.Compare(itemText, backText) == 0)        e.Graphics.DrawString(itemText, e.Font, brush, e.Bounds, StringFormat.GenericDefault);    else    {        foreach (KeyColor keyColor in keyColors)        {            string markText = itemText.Replace(keyColor.key, new string(' ', keyColor.key.Length));            string foreText = string.Empty;            for (int i = 0; i < itemText.Length; i++)                foreText += markText[i] == ' ' ? itemText[i] : ' ';            e.Graphics.DrawString(foreText, e.Font,                 new SolidBrush(keyColor.color), e.Bounds, StringFormat.GenericDefault);        }        e.Graphics.DrawString(backText, e.Font, brush, e.Bounds, StringFormat.GenericDefault);    }    e.DrawFocusRectangle();}
[解决办法]
C# code
public struct KeyColor{    public string key;    public Color color;    public KeyColor(string key, Color color)    {        this.key = key;        this.color = color;    }}
[解决办法]
C# code
   private void listBox1_DrawItem(object sender, DrawItemEventArgs e)        {            e.DrawBackground();            string StarText=listBox1.Items[e.Index].ToString();            string EndText = StarText.Remove(0, 3);            e.Graphics.DrawString(StarText.Substring(0, 3), e.Font, Brushes.Black, e.Bounds);            switch (EndText)            {                case "成功":                    e.Graphics.DrawString("      " + StarText.Remove(0, 3), e.Font, Brushes.Red, e.Bounds);                    break;                case "失败":                    e.Graphics.DrawString("      " + StarText.Remove(0, 3), e.Font, Brushes.Blue, e.Bounds);                    break;                                   default:                    e.Graphics.DrawString("      " + StarText.Remove(0, 3), e.Font, Brushes.Black, e.Bounds);                    break;            }                                e.DrawFocusRectangle();                     } 

热点排行