listview设置为Details
我现在想鼠标右键listview中的行时能够有右键但是如果直接在属性ContextMenuStrip中关联,那么只要在listview中鼠标右键就会出来菜单我需要的是在listview中选中的行时鼠标右键才有菜单
应该在哪怎么判断下

解决方案 »

  1.   

    对Listview的菜单,在开始的时候不要设置,而是通过下面的代码来设置:
    private void listView1_MouseDown(object sender, MouseEventArgs e)
    {
    if (e.Button == MouseButtons.Right)
    {
    if (this.listView1.GetItemAt(e.X, e.Y) != null)
    {
    this.listView1.ContextMenuStrip = this.contextMenuStrip1;
    }
    else
    {
    this.listView1.ContextMenuStrip = null;
    }
    }
    }
      

  2.   

    如果想在用户按系统的右键菜单键的时候也要做出响应,则应对菜单添加如下的处理:
    private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)
    {
    if (this.listView1.SelectedIndices.Count == 0)
    {
    e.Cancel = true;

    }这样的话,鼠标的事件也是好使的.
      

  3.   

    好像判断不完全
    第一次可以
    比如我listview中开始没有一行,这样鼠标右键是无效的
    然后我加了一行,现在鼠标右键有了,
    但是这个时候我鼠标右键其他的地方也会有菜单了
      

  4.   

    漏了
    this.listView1.ContextMenuStrip = null;呵呵
      

  5.   

    加一个ContextMenu cm1;
    对Listview的菜单,在开始的时候不要设置,而是通过下面的代码来设置:
    private void listView1_MouseDown(object sender, MouseEventArgs e)
    {
    if (e.Button == MouseButtons.Right)
    {
    if (this.listView1.GetItemAt(e.X, e.Y) != null)
    {
                     cm.Show( listView1 , new Point(e.X,e.Y、));
        }
    }
    }
      

  6.   

    觉得还是在菜单的Opening事件里处理更得当:
    private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)
    {
    //如果没有选中的行则不显示这个菜单
    if (this.listView1.SelectedIndices.Count == 0)
    {
    e.Cancel = true;//取消显示

    }