如题·
我想通过Combox的DrawItem 事件,重绘Combox,在下拉框中单击右键,来编辑鼠标说选择项·高手帮帮忙·给点代码·谢谢·

解决方案 »

  1.   

    private void comboBox1_DrawItem(object sender, DrawItemEventArgs e)
    {
        if (e.Index == -1) { return; } // 未下拉的当前框文本, 不需要重绘制    ComboBox thisComboBox = sender as ComboBox;  // 当前组合框
        string itemText = Convert.ToString(thisComboBox.Items[e.Index]);  // 由DrawString()处理null情况    e.DrawBackground();  // 绘制背景
        using (SolidBrush brush = new SolidBrush(e.ForeColor))
        {
            e.Graphics.DrawString(itemText, e.Font, brush, e.Bounds, StringFormat.GenericDefault);  // 绘制文本
        }
        e.DrawFocusRectangle();  // 绘制聚焦框
    }private void comboBox1_MeasureItem(object sender, MeasureItemEventArgs e)
    {
        if (e.Index % 2 == 0)
        {
            e.ItemHeight = 15;  // 偶数项的项高
        }
        else
        {
            e.ItemHeight = 25;  // 奇数项的项高
        }
    }
    需要指出如下几点: 如果设置了ComboBox.ItemHeight的值,且每个项高度相同,则可以省略事件方法ComboBox.MeasureItem; 
    ComboBox.DrawMode为OwnerDrawFixed时,ComboBox.MeasureItem事件失效,此时取ComboBox.ItemHeight的值; 
    ComboBox.DrawMode为OwnerDrawVariable时,可以在ComboBox.MeasureItem改变指定项的高度; 
    如果项高固定为height,则下拉框高 ComboBox.DropDownHeight = ComboBox.MaxDropDownItems * height。 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/hulihui/archive/2009/01/29/3854717.aspx
      

  2.   


    namespace WindowsApplication6
    {
        public partial class Form1 : Form
        {
            ContextMenu comboBoxtMenu = null;        public Form1()
            {
                InitializeComponent();
           //初始化菜单
                InitializeComboBoxtMenu();
            }        private void InitializeComboBoxtMenu()
            {
                //定义一个MenuItem数组,并把此数组同时赋值给ContextMenu对象
                 MenuItem[] mnuItems = new MenuItem[8];
                mnuItems[0] = new MenuItem();
                mnuItems[0].Text = "启动服务";
                //mnuItems[0].Click += new EventHandler(Start_ToolStripMenuItem_Click);            mnuItems[1] = new MenuItem();
                mnuItems[1].Text = "停止服务";
               // mnuItems[1].Click += new EventHandler(Stop_ToolStripMenuItem_Click);            mnuItems[2] = new MenuItem("-");            mnuItems[3] = new MenuItem();
                mnuItems[3].Text = "配置数据库连接";
                //mnuItems[3].Click += new EventHandler(DBConn_ToolStripMenuItem_Click);            mnuItems[4] = new MenuItem();
                mnuItems[4].Text = "配置设备端口";
                //mnuItems[4].Click += new EventHandler(SetPort_ToolStripMenuItem_Click);            mnuItems[5] = new MenuItem();
                mnuItems[5].Text = "配置电子地图";
                //mnuItems[5].Click += new EventHandler(Map_ToolStripMenuItem_Click);            mnuItems[6] = new MenuItem("-");            mnuItems[7] = new MenuItem();
                mnuItems[7].Text = "退出系统";
                //mnuItems[7].Click += new EventHandler(Quit_ToolStripMenuItem_Click);
                mnuItems[7].DefaultItem = true;
                //为comboBoxt1设置菜单ContextMenu对象
                comboBoxtMenu = new ContextMenu(mnuItems);
                this.comboBox1.ContextMenu = comboBoxtMenu;
            }
        }
    }
    mnuItems  菜单的定义可以改成你自己想要的
    //mnuItems[5].Click += new EventHandler(Map_ToolStripMenuItem_Click);
    这个事菜单的单击事件。根据自己的情况修改
      

  3.   

    其实你一定需要用CombBox么?
    完全可以使用MenuItem来代替
    这样右键菜单就很好添加了
      

  4.   


    谢谢2楼的··这些基础我还有·· 这样说吧··combox 在dropdown的时候弹出了下拉的选框·有很多选项 当我鼠标移动到选项上的时候·单击鼠标右键·弹出我要的右键菜单·谢谢··
      

  5.   

    问题重新描述一下
    我想通过封装控件,或者其它方式来实现 在combox 的下拉框展开的选项上(即鼠标移动到的选项上)单击右键,弹出右键菜单·实现对该项的修改等操作·谢谢·不知道这样描述行不行··表达能力不好·请理解· 
      

  6.   


    单击鼠标就是combox的值改变了(选折了另一个值)。。直接在改变事件中,把右键菜单载入进来不知你是否要这样的效果
      

  7.   

    在combox的下拉框展开的时候·把鼠标移动(并没有单击左键哟·所以它的值并没有改变)到下面的选项上··我要激活的是选项的右键事件··
    可以再drawitem 中判断出鼠标所选择的项··现在我要的就是·在鼠标移动到的项上·添加一个右键菜单 (默认是没有的) combox也不处理这个消息·
      

  8.   

    http://topic.csdn.net/u/20081123/19/94e7b338-d298-4656-a320-869284a71f8d.html
    找到一个MFC的帖子···我就是想实现这个功能谢谢大家了·