【问题标题】:Handling right-click within a MenuItem处理 MenuItem 中的右键单击
【发布时间】:2010-05-10 21:55:06
【问题描述】:

是否可以在 .NET 中检查右键单击菜单项?

框架似乎没有将其作为事件公开,但我见过其他应用程序(如 Chrome 和 Firefox)允许您为菜单项调出右键单击上下文菜单。大概通过一点事件循环魔法,您可以在 .NET 中做同样的事情,对吧?

编辑:我说的是桌面应用程序编程,而不是 ASP.NET。

【问题讨论】:

  • 事实上他在谈论 chrome 和 firefox,我会说 asp.net。
  • Chrome 和 Firefox 只是使用 win32 允许右键单击菜单项的应用程序示例。我并不是要引导您进行 Web 开发。

标签: c# .net winforms user-interface


【解决方案1】:

这是一种不自然的行为。菜单设计为在失去焦点时自动弹出。上下文菜单将成为焦点,菜单结束。 MenuStrip 将与你战斗,我还没有看到它完成。

【讨论】:

    【解决方案2】:

    在 Winforms 中我不确定,我不这么认为,Click 事件是通用的 EventHandler

    在 WPF 中,OnClick 事件可以传入一个 System.Windows.Input.MouseEventArgs 对象,该对象具有 .MiddleButton .RightButton 等属性。

    对于 ASP.NET,您需要使用 javascript 捕获右键单击并提交秘密表单、发起回发或使用 AJAX。

    【讨论】:

      【解决方案3】:

      这并不完全符合我们的要求,但却是一个不错的折衷方案,从 UI 标准的角度来看并不算太大。 WinForms 菜单似乎甚至不响应右键单击,因此请使用按下的 shift 键的存在/不存在。

      private void MenuClick(object sender, EventArgs args)
      {
          if ((Control.ModifierKeys & Keys.Shift) == Keys.Shift) DoSpecialStuff();
          else DoNormalStuff();
      }
      

      【讨论】:

        【解决方案4】:

        Click 事件中,您可以通过以下方式检测鼠标右键:

        Control.MouseButtons == MouseButtons.Right;
        

        虽然您可能还想在 Closing 事件中检查这一点,以防止引发 Close 事件。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-02-06
          • 2013-08-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多