有很多朋友在初次碰到contextMenuStrip控件的时候都不知道如何固定使用的范围(如果不定位,那么使用contextMenuStrip控件的载体控件的任何范围都会触发事件,这显然不合理)。下面我以一个过来人的角度来给出定位代码,供碰到此类问题朋友参考。
步骤一,
我们先来创建一个contextMenuStrip的载体控件(用一个简单的listview控件来呈现简单的数据,便于观察)。
给listview添加的代码如下(记得把listview的View属性先改成Details类型,listview的名字为lv1):
lv1.Items.Add("小朱");
lv1.Items[0].SubItems.Add("男");
lv1.Items[0].SubItems.Add("24岁");
步骤二,
我们给listview控件加载一个contextMenuStrip控件(先添加一个ContextMenuStrip控件,然后将listview控件的ContextMenuStrip属性选择为contextMenuStrip的名字即加载完毕),笔者这里给contextMenuStrip控件取名为context1并给context1添加了三个项.
然后我们运行程序来查看效果图:
contextMenuStrip控件虽然生效了,但是他的位置在listview控件的任意范围都可以出现!!! 这显然不合理。好了,下面我们来对范围进行定位。
步骤三,将listview控件中ContextMenuStrip属性选择为“无”(一定要去掉,之前我们为这个属性添加过名字为context1的contextMenuStrip)。
步骤四,触发listview控件的MouseClick事件,然后在事件中编写一些简单的代码。
private void lv1_MouseClick(object sender, MouseEventArgs e)
{
//鼠标右击才会触发contextMenuStrip控件,并且contextMenuStrip控件只在listview控件中有数据的时候才有效,这样就固定下了范围
if (e.Button == MouseButtons.Right && lv1.SelectedItems.Count == 1)
{
context1.Show(MousePosition);
}
}
我们再来看下效果,鼠标只能在移到listview控件有数据的地方右击弹出菜单了。