none
如何实现点击指定区域才弹出右键菜单,点击其它区域时保持沉默 RRS feed

  • 问题

  • 大家好,我想为控件提供一个右键菜单,但是实现起来的效果是我在控件的任意位置右键都会出现快捷菜单,而我本人特别想避免出现这样的情况。
    我只希望在我指定的区域内右键才被视为有效,否则都为无效的,该怎么做?用WndProc()吗?
    2012年9月24日 1:02

答案

  • 写在控件的MouseDown事件里

    if (e.Button == System.Windows.Forms.MouseButtons.Right)
    {
        if (e.Location在特定区域)
        {
             控件.ContextMenuStrip = 指定的右键菜单;
        }
        else
        {
             控件.ContextMenuStrip = new ContextMenuStrip();
        }
    }

    谢谢。不过我刚刚试验了一下,发现无论在哪里右键,依然都会出现快捷菜单……

    而且,this.ContexMenuStrip.MouseDown+=new MouseEventHandler(ContextMenuStrip_MouseDown)也似乎没有作用(private void ContextMenuStrip_MouseDown(object sender, MouseEventArgs e)没有被调用)

    我是不是哪里弄错了……


    你搞错对象了,ContexMenuStrip是右键菜单,应该写在你要弹出右键菜单的控件的MouseDown事件里。
    • 已标记为答案 Yawness 2012年9月24日 3:43
    2012年9月24日 2:42

全部回复

  • 写在控件的MouseDown事件里

    if (e.Button == System.Windows.Forms.MouseButtons.Right)
    {
        if (e.Location在特定区域)
        {
             控件.ContextMenuStrip = 指定的右键菜单;
        }
        else
        {
             控件.ContextMenuStrip = new ContextMenuStrip();
        }
    }

    2012年9月24日 1:23
  • 写在控件的MouseDown事件里

    if (e.Button == System.Windows.Forms.MouseButtons.Right)
    {
        if (e.Location在特定区域)
        {
             控件.ContextMenuStrip = 指定的右键菜单;
        }
        else
        {
             控件.ContextMenuStrip = new ContextMenuStrip();
        }
    }

    谢谢。不过我刚刚试验了一下,发现无论在哪里右键,依然都会出现快捷菜单……

    而且,this.ContexMenuStrip.MouseDown+=new MouseEventHandler(ContextMenuStrip_MouseDown)也似乎没有作用(private void ContextMenuStrip_MouseDown(object sender, MouseEventArgs e)没有被调用)

    我是不是哪里弄错了……

    2012年9月24日 2:22
  • 写在控件的MouseDown事件里

    if (e.Button == System.Windows.Forms.MouseButtons.Right)
    {
        if (e.Location在特定区域)
        {
             控件.ContextMenuStrip = 指定的右键菜单;
        }
        else
        {
             控件.ContextMenuStrip = new ContextMenuStrip();
        }
    }

    谢谢。不过我刚刚试验了一下,发现无论在哪里右键,依然都会出现快捷菜单……

    而且,this.ContexMenuStrip.MouseDown+=new MouseEventHandler(ContextMenuStrip_MouseDown)也似乎没有作用(private void ContextMenuStrip_MouseDown(object sender, MouseEventArgs e)没有被调用)

    我是不是哪里弄错了……


    你搞错对象了,ContexMenuStrip是右键菜单,应该写在你要弹出右键菜单的控件的MouseDown事件里。
    • 已标记为答案 Yawness 2012年9月24日 3:43
    2012年9月24日 2:42
  • this.ContexMenuStrip.MouseDown+=new MouseEventHandler(ContextMenuStrip_MouseDown)也似乎没有作用(private void ContextMenuStrip_MouseDown(object sender, MouseEventArgs e)没有被调用)


    我是不是哪里弄错了……


    你搞错对象了,ContexMenuStrip是右键菜单,应该写在你要弹出右键菜单的控件的MouseDown事件里。
    谢谢,原来如此。刚才又试验了一下,成功!
    2012年9月24日 3:43