Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# c语言中的简单托盘应用#_C#_.net_Visual Studio_Visual Studio 2017 - Fatal编程技术网

C# c语言中的简单托盘应用#

C# c语言中的简单托盘应用#,c#,.net,visual-studio,visual-studio-2017,C#,.net,Visual Studio,Visual Studio 2017,我用c#编写了一个简单的托盘应用程序。我要做的是左键单击打开上下文菜单。目前,它仅在右键单击时打开。这似乎是标准行为 我设法在左键点击时做出反应,但我不知道如何以编程方式打开上下文菜单。有什么想法吗 using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.Windows.Forms; using System.

我用c#编写了一个简单的托盘应用程序。我要做的是左键单击打开上下文菜单。目前,它仅在右键单击时打开。这似乎是标准行为

我设法在左键点击时做出反应,但我不知道如何以编程方式打开上下文菜单。有什么想法吗

  using System;
  using System.Collections.Generic;
  using System.Linq;
  using System.Threading.Tasks;
  using System.Windows.Forms;
  using System.Threading;
  using System.Drawing;


  namespace trackingCore
  {
  static class Program
  {
      /// <summary>
      /// Der Haupteinstiegspunkt für die Anwendung.
      /// </summary>
      [STAThread]
      static void Main()
      {
          Application.EnableVisualStyles();
          Application.SetCompatibleTextRenderingDefault(false);
          NotifyIcon notifyIcon1 = new NotifyIcon();
          ContextMenu contextMenu1 = new ContextMenu();
          MenuItem menuItem0 = new MenuItem();
          MenuItem menuItem1 = new MenuItem();
          MenuItem menuItem2 = new MenuItem();
          contextMenu1.MenuItems.AddRange(new MenuItem[] { menuItem0 });
          contextMenu1.MenuItems.AddRange(new MenuItem[] { menuItem1 });
          contextMenu1.MenuItems.AddRange(new MenuItem[] { menuItem2 });
          menuItem0.Index = 0;
          menuItem0.Text = "open test";
          menuItem0.Click += new EventHandler(menuItem1_Click);
          menuItem1.Index = 1;
          menuItem1.Text = "stop test";
          menuItem1.Click += new EventHandler(menuItem1_Click);
          menuItem2.Index = 2;
          menuItem2.Text = "close test";
          menuItem2.Click += new EventHandler(menuItem1_Click);
          notifyIcon1.Icon = new Icon("test.ico");
          notifyIcon1.Text = "testitest";
          notifyIcon1.ContextMenu = contextMenu1;
          notifyIcon1.Click += new EventHandler(menuItem1_Click);
          notifyIcon1.Visible = true;
          Application.Run();
          notifyIcon1.Visible = false;
      }
      private static void menuItem1_Click(object Sender, EventArgs e)
      {
          Application.Exit();
      }

      private static void iconClick(object Sender, EventArgs e)
      {
          Console.Write("open context menu with left click");
      }
  }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Threading.Tasks;
使用System.Windows.Forms;
使用系统线程;
使用系统图;
命名空间跟踪核心
{
静态类程序
{
/// 
///这是一个很好的例子。
/// 
[状态线程]
静态void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
NotifyIcon notifyIcon1=新NotifyIcon();
ContextMenu contextMenu1=新建ContextMenu();
MenuItem menuItem0=新的MenuItem();
MenuItem menuItem1=新的MenuItem();
MenuItem menuItem2=新的MenuItem();
contextMenu1.MenuItems.AddRange(新MenuItem[]{menuItem0});
contextMenu1.MenuItems.AddRange(新MenuItem[]{menuItem1});
contextMenu1.MenuItems.AddRange(新MenuItem[]{menuItem2});
menuItem0.Index=0;
menuItem0.Text=“开放测试”;
menuItem0.Click+=新建事件处理程序(menuItem1\u Click);
menuItem1.Index=1;
menuItem1.Text=“停止测试”;
menuItem1.Click+=新建事件处理程序(menuItem1\u Click);
menuItem2.Index=2;
menuItem2.Text=“关闭测试”;
menuItem2.Click+=新建事件处理程序(menuItem1\u Click);
notifyIcon1.Icon=新图标(“test.ico”);
notifyIcon1.Text=“testtest”;
notifyIcon1.ContextMenu=contextMenu1;
notifyIcon1.Click+=新建事件处理程序(菜单项1\u Click);
notifyIcon1.Visible=true;
Application.Run();
notifyIcon1.Visible=false;
}
私有静态无效菜单1\u单击(对象发送方,事件参数e)
{
Application.Exit();
}
私有静态无效图标单击(对象发送方,事件参数e)
{
编写(“用左键单击打开上下文菜单”);
}
}
}

这是一些说contextMenu1.Show的解决方案。然而,show函数需要两个参数,我无法判断哪一个是正确的。它过去只有一个参数。有什么想法吗

至少一些旧答案应该有用。刚刚在windows 10上测试了我的旧应用程序。对代码进行了一点调整以获得答案

公共类进程图标:IDisposable
{
公共通知图标{get;set;}
公共进程图标()
{
图标=新的NotifyIcon();
}
公共空间显示()
{
Icon.MouseClick+=OnIconMouseClick;
Icon.Text=“一些文本”;
Icon.Icon=新图标(SystemIcons.Application,40,40);
Icon.Visible=true;
//在这里,您可以像使用ContextMenu一样插入所有项目
//我甚至不知道有什么不同
var contendxtmenus=new ContextMenuStrip();
Icon.ContextMenuStrip=contenxtmenus;
}
公共空间处置()
{
Icon.Dispose();
}
private void OnMouseClick(对象发送者,鼠标目标e)
{
//为我工作
Icon.ContextMenuStrip.Show(Cursor.Position.X,Cursor.Position.Y);
}
}

可能的重复项不是重复项。你指的是2010年的帖子。解决方案在2017年不起作用您是说在
ContextMenuStrip
上调用
Show
没有显示它?Show需要不同的参数。我不知道是哪一个。以前需要一个参数,现在需要两个。你说你不知道需要哪两个参数。答案就在docs.thx里。它正在工作,但我想使用ContextMenu,而不是ContextMenuStrip<代码>Icon.ContextMenuStrip.Show(游标.Position)也在没有X和Y的情况下工作