它似乎运行良好,但方式与我想象的不同。如果我使用comboBox1和contextMenuStrip1创建一个简单项目,然后使用下图中显示的所有设置,它将显示我在下拉列表的TEXT区域中创建的上下文菜单。我希望它显示下拉列表区域(包含所有列表项)的下拉菜单。
注意:此处的目标是让上下文菜单(“删除项目”)显示在列表项目之上(例如“Test2”)。
我不知道为什么我会被这些琐碎的东西挂断,但现在这让我感到困惑。我显然做了一些愚蠢的事情,看不出我做错了什么。我的目标很简单......通过DESIGN GUI,创建一个组合框对象和一个contextmenustrip对象。我想在右键单击组合框时弹出contextmenustrip对象。
我想只需创建组合框对象,然后在ContextMenuStrip属性上选择正确的contextmenustrip对象即可。似乎还有更多。
我做错了什么?
答案 0 :(得分:2)
我不会在这里接受我自己的答案,因为这只是一个解决方案而不是我原来问题的解决方案。我发布这篇文章的唯一原因是希望能够快速解决其他用户的问题。
一种可能的解决方法是不使用上下文菜单来删除项目,而是执行与许多应用程序类似的操作,只需处理KeyDown事件即可使用箭头键和删除键从列表中删除项目。 / p>
Project
和Form
( Form1 )。ComboBox
( comboBox1 )。public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
comboBox1.Text = "Choose from list.";
comboBox1.Items.Add("Test1");
comboBox1.Items.Add("Test2");
comboBox1.Items.Add("Test3");
}
private void comboBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Delete && comboBox1.DroppedDown)
{
//Remove the listitem from the combobox list
comboBox1.Items.RemoveAt(comboBox1.SelectedIndex);
//Make sure no other processing happens, ex: deleting text from combobox
e.Handled = true;
}
else if (e.KeyCode == Keys.Down && !comboBox1.DroppedDown)
{
//If the down arrow is pressed show the dropdown list from the combobox
comboBox1.DroppedDown = true;
}
}
}
现在运行该程序并单击下拉列表(或选项卡),如果它未被选中。然后只需使用向下箭头显示组合框中的列表,然后选择一个然后将其删除。
答案 1 :(得分:0)
这并不像看起来那么容易。因为创建的下拉列表是动态创建的本机ListBox窗口。要访问该列表框,您必须发送 下拉事件中的“CB_GETCOMBOBOXINFO”。
最好的方法是从System.Windows.Forms.Combobox派生 像这里描述的: .NET Is it possible to have a contextmenu on an item of a combobox?
在这个msdn论坛上找到了一个更精确的答案here。这也给你一个例子。