我编写了一个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;
}
答案 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))