在ComboBox上使用ContextMenuStrip

时间:2015-06-02 18:18:08

标签: c# combobox contextmenustrip

更新

它似乎运行良好,但方式与我想象的不同。如果我使用comboBox1和contextMenuStrip1创建一个简单项目,然后使用下图中显示的所有设置,它将显示我在下拉列表的TEXT区域中创建的上下文菜单。我希望它显示下拉列表区域(包含所有列表项)的下拉菜单。

Dropdown Sample Dropdown Sample Menu Dropdown Sample Menu Fail

注意:此处的目标是让上下文菜单(“删除项目”)显示在列表项目之上(例如“Test2”)。

我不知道为什么我会被这些琐碎的东西挂断,但现在这让我感到困惑。我显然做了一些愚蠢的事情,看不出我做错了什么。我的目标很简单......通过DESIGN GUI,创建一个组合框对象和一个contextmenustrip对象。我想在右键单击组合框时弹出contextmenustrip对象。

我想只需创建组合框对象,然后在ContextMenuStrip属性上选择正确的contextmenustrip对象即可。似乎还有更多。

我做错了什么?

Context Menu Example

2 个答案:

答案 0 :(得分:2)

我不会在这里接受我自己的答案,因为这只是一个解决方案而不是我原来问题的解决方案。我发布这篇文章的唯一原因是希望能够快速解决其他用户的问题。

一种可能的解决方法是不使用上下文菜单来删除项目,而是执行与许多应用程序类似的操作,只需处理KeyDown事件即可使用箭头键和删除键从列表中删除项目。 / p>

  1. 制作新的ProjectForm Form1 )。
  2. 在新创建的 Form1 上新建ComboBox comboBox1 )。
  3. 将以下代码粘贴到 Form1 ...
  4. Form1代码段:

    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。这也给你一个例子。