首先我建了一个mainForm,在窗体里添加了一个SplitContainer控件,分别在两个panel里加入了一个listbox,分别名为SectionList和SectionData。还有一个编辑好的ContexMenuStrip,名为listContextMenu。它们的访问级别均为Internal。处理代码片段如下:        private void SectionList_SelectedIndexChanged(object sender, EventArgs e)
        {
            SectionData.Items.Clear();            if (SectionList.SelectedIndex >= 0)
            {
                LoadSectionData(SectionList.Text);
            }
        }        private void SectionList_MouseClick(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                SectionData.Items.Add(SectionData.SelectedItems);
                listContextMenu.Show(MousePosition);
            }
        }
上面那段代码不能弹出菜单,就像是没有处理MouseClick事件一样。如果我把其中的listContextMenu.Show(MousePosition);移到上面的那个事件的IF里却能成功执行。我之所以使用MouseClick事件处理ContextMenuStrip是要进行一些定位还有其它细微功能的处理。在MSDN里listbox是有MouseClick事件的,但是我这里为什么不能响应呢?

解决方案 »

  1.   

    我也是刚发现有这种事,百度了一下,
    请参考:http://blog.csdn.net/lcyhjx/archive/2008/03/05/2149461.aspx
    -----------------------------------------------------------------------------
    TextBox、RichTextBox、ListBox、MaskedTextBox 和 CheckedListBox 控件注意
    当用户单击这些控件内的任何位置时,发生下面详细说明的事件行为。单击左键:Click、MouseClick单击右键:不引发任何单击事件双击左键:Click、MouseClick、DoubleClick,MouseDoubleClick双击右键:不引发任何单击事件
    -----------------------------------------------------------------------------
      

  2.   


    谢谢哦。ListBox的任何鼠标事件都不响应。
    看来我要把ListBox换成ListView了。
    我觉得这应该是个bug,MSDN里是说支持的,可是实际上不支持。
      

  3.   

    ListBox如果在定义事件就可以引发MouseDown或MouseUp事件,这些需要MouseEventArgs支持。在窗口类中,或者InitializeComponent()方法里加入对应的事件定义。如:this.SectionList.MouseUp = new System.Windows.Forms.MouseEventHandler(this.SectionList_MouseUp);