有这样一个ComboBox(JSXZ),其中有三个值:超级管理员、管理员、普通用户,属性ForeColor=HotTrack,DropDownStyle=DropDownList。问题一:想通过“ForeColor=HotTrack”,把选项中的字体改为蓝色,下拉选择框中是蓝色的,但是选定后变成了黑色,怎么个情况?
问题二:想把选定后的ComboBox的背景改变下,应该怎样实现?下面是“人生如梦”大侠(谢谢)给的答案,貌似存在几个错误,还有几句看不懂:using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using tsleyyg.App_Help;
namespace tsleyyg
{
    public partial class Login : Form
    {
        public Login()
        {
            InitializeComponent();
        }        private void Loginbutton_Click(object sender, EventArgs e)
        {        }        private void Login_Load(object sender, EventArgs e)
        {
            JSXZ.SelectedIndex=0;
        }        private void JSXZ_SelectedIndexChanged(object sender, EventArgs e)
        {
            Tfvalue.val = JSXZ.SelectedText;
        }        private void JSXZ_DrawItem(object sender, DrawItemEventArgs e)
        {
                      if (e.Index < 0)
            {
                return;
            }            Rectangle rect = e.Bounds();    这一句出错。编号1 
           if (e.State & DrawItemState.Selected)  这一句出错。编号2    
            {
                e.Graphics.FillRectangle(SystemBrushes.Highlight, rect);
            }
            else
            {
                e.Graphics.FillRectangle(SystemBrushes.Window,rect);
            }                     问题:   这是干嘛的,看不懂啊。能解释下吗?

            string ColorName = JSXZ.Items(e.Index);  这一句出错,编号3
            SolidBrush b = new SolidBrush(Color.FromName(ColorName));
            rect.Inflate(-2,-2);     问题:   这是什么意思?
            e.Graphics.FillRectangle(b,rect);
            e.Graphics.DrawRectangles(Pens.Black,rect);  这一句两个错误,编号4、5            Brush b2;
            if ((int)b.Color.R + (int)b.Color.G + (int)b.Color.B > 128 * 3)
            {
                b2 = Brushes.Black;
            }
            else
            {
                b2 = Brushes.White;
            }                          问题:这是什么意思,能解释下吗?       

            e.Graphics.DrawString(ColorName,this.JSXZ.Font,b2,rect.X,rect.Y);        }
    }
}
错误提示信息:
错误 1 Non-invocable member 'System.Windows.Forms.DrawItemEventArgs.Bounds' cannot be used like a method. C:\Users\Administrator\Desktop\tsleyyg09-12\tsleyyg\Login.cs 46 32 tsleyyg错误 2 无法将类型“System.Windows.Forms.DrawItemState”隐式转换为“bool” C:\Users\Administrator\Desktop\tsleyyg09-12\tsleyyg\Login.cs 47 17 tsleyyg错误 3 Non-invocable member 'System.Windows.Forms.ComboBox.Items' cannot be used like a method. C:\Users\Administrator\Desktop\tsleyyg09-12\tsleyyg\Login.cs 56 37 tsleyyg错误 4 与“System.Drawing.Graphics.DrawRectangles(System.Drawing.Pen, System.Drawing.RectangleF[])”最匹配的重载方法具有一些无效参数 C:\Users\Administrator\Desktop\tsleyyg09-12\tsleyyg\Login.cs 60 13 tsleyyg错误 5 参数“2”: 无法从“System.Drawing.Rectangle”转换为“System.Drawing.RectangleF[]” C:\Users\Administrator\Desktop\tsleyyg09-12\tsleyyg\Login.cs 60 50 tsleyyg

解决方案 »

  1.   

    效果一:下拉选择框中的字体是蓝色的,选定后变成了黑色字体。
    效果二:选定后的ComboBox的背景改变。
      

  2.   

    大侠(ly_longyue)您给的答案用上后没反应啊。
    代码如下:
    private void JSXZ_DrawItem(object sender, DrawItemEventArgs e)
            {
                SolidBrush sb = new SolidBrush(Color.Blue);
                string str = JSXZ.Items[e.Index].ToString();
                e.Graphics.DrawString(str, new Font("宋体", 10), sb, new Point(e.Bounds.X, e.Bounds.Y));
            }
      

  3.   

    你分别在SelectIndexChenged事件中修改相应Items的ForeColor、backColor等属性就行了,
      

  4.   

    “你分别在SelectIndexChenged事件中修改相应Items的ForeColor、backColor等属性就行了”,貌似不行。
      

  5.   

    问题一:想通过“ForeColor=HotTrack”,把选项中的字体改为蓝色,下拉选择框中是蓝色的,但是选定后变成了黑色,怎么个情况?下拉框的背景是蓝色的,选中项再变成蓝色,可以吗?问题二:想把选定后的ComboBox的背景改变下,应该怎样实现?
    你在SelectedIndexChanged中修改ComboBox的BackColor不久可以了?
            private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
            {
                this.comboBox1.BackColor = Color.Red;
            }