combox下拉框中右键菜单问题 如题·我想通过Combox的DrawItem 事件,重绘Combox,在下拉框中单击右键,来编辑鼠标说选择项·高手帮帮忙·给点代码·谢谢· 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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 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);这个事菜单的单击事件。根据自己的情况修改 其实你一定需要用CombBox么?完全可以使用MenuItem来代替这样右键菜单就很好添加了 谢谢2楼的··这些基础我还有·· 这样说吧··combox 在dropdown的时候弹出了下拉的选框·有很多选项 当我鼠标移动到选项上的时候·单击鼠标右键·弹出我要的右键菜单·谢谢·· 问题重新描述一下我想通过封装控件,或者其它方式来实现 在combox 的下拉框展开的选项上(即鼠标移动到的选项上)单击右键,弹出右键菜单·实现对该项的修改等操作·谢谢·不知道这样描述行不行··表达能力不好·请理解· 单击鼠标就是combox的值改变了(选折了另一个值)。。直接在改变事件中,把右键菜单载入进来不知你是否要这样的效果 在combox的下拉框展开的时候·把鼠标移动(并没有单击左键哟·所以它的值并没有改变)到下面的选项上··我要激活的是选项的右键事件··可以再drawitem 中判断出鼠标所选择的项··现在我要的就是·在鼠标移动到的项上·添加一个右键菜单 (默认是没有的) combox也不处理这个消息· http://topic.csdn.net/u/20081123/19/94e7b338-d298-4656-a320-869284a71f8d.html找到一个MFC的帖子···我就是想实现这个功能谢谢大家了· C#中StartWith怎么用 richtextbox的字体设置 求解一个treeview的递归算法!! 哪位有Microsoft.Office.Interop命名空间的Word,Excel,PowerPoint等等,各个类、函数的详细说明啊? 怎样调用命令而不闪黑框啊 前台调用资源文件不成功,帮手! C# listView 在失去焦点隐藏 怎么实现 新手向 错误 CS0103: 当前上下文中不存在名称“imageURLs” 请问,所列代码中的Paint事件是如何被调用的?谢谢 检索时间段的SQL怎么写? Winform 中如何设置控件在面板中居中 MSDN有什么好的,这么捧?
{
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
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);
这个事菜单的单击事件。根据自己的情况修改
完全可以使用MenuItem来代替
这样右键菜单就很好添加了
谢谢2楼的··这些基础我还有·· 这样说吧··combox 在dropdown的时候弹出了下拉的选框·有很多选项 当我鼠标移动到选项上的时候·单击鼠标右键·弹出我要的右键菜单·谢谢··
我想通过封装控件,或者其它方式来实现 在combox 的下拉框展开的选项上(即鼠标移动到的选项上)单击右键,弹出右键菜单·实现对该项的修改等操作·谢谢·不知道这样描述行不行··表达能力不好·请理解·
单击鼠标就是combox的值改变了(选折了另一个值)。。直接在改变事件中,把右键菜单载入进来不知你是否要这样的效果
可以再drawitem 中判断出鼠标所选择的项··现在我要的就是·在鼠标移动到的项上·添加一个右键菜单 (默认是没有的) combox也不处理这个消息·
找到一个MFC的帖子···我就是想实现这个功能谢谢大家了·