【问题标题】:How to change Event properties & create new events in C# .NET如何在 C# .NET 中更改事件属性和创建新事件
【发布时间】:2010-07-13 08:25:35
【问题描述】:

我在我的 WinForms 应用程序中使用 NotifyIcon(系统托盘图标)。我也有一个 ContextMenuStrip 分配给它。当用户右键单击 NotifyIcon 时,会弹出此 ContextMenuStrip。

这些是 NotifyIcon 拥有的唯一事件。

Click           
DoubleClick 
MouseClick  
MouseDoubleClick
MouseDown   
MouseMove   
MouseUp

此 contextMenuStrip 项 (ToolStripMenuItem) 是动态生成的。我的意思是只有很少的默认项目,如“关于”、“退出”、“帮助”等。但是当用户右键单击它时,其他项目会动态生成并插入到此菜单中。我正在生成项目并在Click 事件处理程序中插入 contextMenuStrip

现在,我有两个问题:

  1. 问题是它显示默认菜单条,然后我的Click 事件处理程序执行并弹出新的更新菜单。我怎样才能避免这种情况?我根本不想看到默认菜单。换句话说,我需要覆盖默认行为。

  2. 其他问题是因为我正在处理Click 事件(因为我没有找到 RightClick 事件)左键单击也由同一个处理程序处理。我想在左键单击时做不同的事情(如显示应用程序窗口)并在右键单击时显示动态生成的 contextMenuStrip。如何做到这一点?

  3. 为什么会有两个不同的事件,比如ClickMouseClick?我们还会点击什么?这两个不是相互依存的。我的意思是,只要有鼠标点击,就会有点击。

如果你能指出一些例子。那太好了!

【问题讨论】:

    标签: c# .net winforms


    【解决方案1】:

    Item #1) ContextMenuStrip 具有允许您在菜单显示之前处理菜单项的任何动态创建的事件。查看OpeningOpened 事件。

    Item #2) 使用MouseEventArgs 参数来检查引发事件时的鼠标状态。

    Item #3) 根据控件的不同,ClickMouseClick 可以不同。以按钮为例。当按钮具有焦点时,当用户按下 Space 或 Enter 键时会引发“Click”事件。在大多数情况下,MouseClick 会生成 Click 事件。

    【讨论】:

      【解决方案2】:

      我是 OP。我想我已经做到了。

       notifyIcon.MouseDown += new MouseEventHandler(notifyIcon_MouseDown);
      

          static void notifyIcon_MouseDown(object sender, MouseEventArgs e)
          {
              NotifyIcon notifyIcon = sender as NotifyIcon;
              if (e.Button == MouseButtons.Left)
              {
                  MessageBox.Show("Left Button Clicked"); // & do what ever you want
      
              }
              else
              {
                  updateMenuItems(notifyIcon.ContextMenuStrip); 
              }
          }
      

      【讨论】:

        猜你喜欢
        • 2017-03-09
        • 2012-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-09
        • 1970-01-01
        • 2016-08-26
        • 1970-01-01
        相关资源
        最近更新 更多