单击后,在ContextMenuStrip中的项旁边显示一个图标

时间:2016-07-30 11:15:44

标签: c# contextmenustrip

我编写了一个Windows窗体应用程序,它可以通过执行两个批处理文件自动更改我的GateWay。 问题是,当我点击它时,我想在"check.ico"列表中的项旁边显示ContextMenu图标。

这是我的代码:

 public Form1()
        {
            InitializeComponent();
        }
        Image MenuStripImage = Image.FromFile(@"C:\Users\ALIENWARE\Documents\Visual Studio 2015\Projects\routerSelect\routerSelect\Check.ico");
        NotifyIcon TrayIcon;
        ContextMenuStrip TrayMenu;
        private void Form1_Load(object sender, EventArgs e)
        {

            Image MenuStripExit = Image.FromFile(@"C:\Users\ALIENWARE\Documents\Visual Studio 2015\Projects\routerSelect\routerSelect\exit.ico");
            this.WindowState = FormWindowState.Maximized;
            this.ShowInTaskbar = false;
            this.Hide();
            TrayIcon = new NotifyIcon();
            TrayMenu = new ContextMenuStrip();
            TrayMenu.Items.Add("GreenPAcket").Click += new EventHandler(GreenpacketSelect);
            //if (DLinkSelectcliced == true && GreenPacketSelected == false)
            //{
                TrayMenu.Items.Add(MenuStripImage);
            //}
            TrayMenu.Items.Add("D-Link DSL 2890AL 5GHz").Click += new EventHandler(DLinkSelect);
            //if (GreenPacketSelected == true && DLinkSelectcliced == false)
            //{
                TrayMenu.Items.Add(MenuStripImage);
            //}
            TrayMenu.Items.Add("Exit", MenuStripExit).Click += new EventHandler(Exit);
            TrayIcon.ContextMenuStrip = TrayMenu;
            TrayIcon.Visible = true;
            TrayIcon.Icon = new Icon(@"C:\Users\ALIENWARE\Documents\Visual Studio 2015\Projects\WindowsFormsApplication2\WindowsFormsApplication2\router.ico");

        }

        private void Exit(object sender, EventArgs e)
        {
            System.Windows.Forms.Application.Exit();
        }

      //  bool DLinkSelectcliced = false;
        private void DLinkSelect(object sender, EventArgs e)
        {
        //    DLinkSelectcliced = true;
            Process Proc = new Process();
            Proc.StartInfo.FileName = (@"C:\Users\ALIENWARE\Documents\Visual Studio 2015\Projects\routerSelect\routerSelect\Dlink.lnk");
            Proc.Start();
            TrayMenu.Items.Add(MenuStripImage);
     //       GreenPacketSelected = false;
        }
      //  bool GreenPacketSelected = false;
        private void GreenpacketSelect(object sender, EventArgs e)
        {
     //       GreenPacketSelected = true;
            Process Proc = new Process();
            Proc.StartInfo.FileName = (@"C:\Users\ALIENWARE\Documents\Visual Studio 2015\Projects\routerSelect\routerSelect\GreenPacket.lnk");
            Proc.Start();
            TrayMenu.Items.Add(MenuStripImage);
  //          DLinkSelectcliced = false;
        }

1 个答案:

答案 0 :(得分:3)

如果check.ico是复选标记,则表示您不需要它用于ContextMenuItem,因为它具有显示复选标记的选项,只需为该项启用CheckOnClick属性。

但是,如果您想要显示自定义图标,则必须先将其转换为图像
您可以自己动手或使用下面的方法让C#为您执行此操作

此处使用方法将图标转换为bmp图像:
http://www.dotnetfunda.com/codes/show/967/icon-to-bitmap-in-csharp-winforms
或者只是创建此图标的.png / .bmp版本。

但首先你应该将这些图标作为资源添加到你的项目中,因为如果这个图标不存在于你给它的位置就不会工作(所以你不能在另一台PC上使用它)。
要打开解决方案资源管理器,右键单击项目并选择属性,然后转到资源,选择图标,单击添加资源并添加所有图标。

然后从您输入的资源中加载图标:
notifyIcon1.Icon = Properties.Resources.iconName

要在您的ContextMenuItem方法中将图标显示为图像,如下所示: menu1ToolStripMenuItem.Image = ConvertFromIconToBitmap(Properties.Resources.iconName, new Size(16,16))

是的,我看了一下你的代码,我认为那里有很多问题......