我有一个在系统托盘中的应用程序.我想让用户点击它时可见notifyIcon,如果它已经不可见.如果它已经可见,则应该隐藏它.此外,当用户单击除表单上的其他任何地方时,表单应隐藏(如果它可见).
我的代码看起来像这样:
protected override void OnDeactivated(EventArgs e)
{
showForm(false);
}
public void showForm(bool show)
{
if(show)
{
Show();
Activate();
WindowState = FormWindowState.Normal;
}
else
{
Hide();
WindowState = FormWindowState.Minimized;
}
}
private void notifyIcon1_MouseClicked(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
if (WindowState != FormWindowState.Normal)
{
showForm(true);
}
}
}
Run Code Online (Sandbox Code Playgroud)
代码的问题是onDeactivated在点击调用之前调用,它隐藏表单而notifyIcon1_MouseClicked不是重新显示它.如果我能够检测到焦点是否由于点击notifyIcon或其他原因而丢失,则可以解决问题.
我已经完成了我的研究并发现了一个类似的线程,但是当onDeactivated被调用时,只有当鼠标位置在托盘上时才检测到解决方案:通过单击NotifyIcon(任务栏图标)来切换C#窗口
更新:我发布的解决方案只检测用户的鼠标是否位于任务栏中的托盘图标上,因此如果您点击任何其他托盘,该onDeactivated事件将不会被触发.我想获得与系统卷应用程序相同的功能.
我正在使用Visual Studio Express 2013来编写一个无形的VB.Net应用程序,该应用程序将在系统托盘部分中启动并保持图标化状态.
我搜索了如何开始的信息,但没有找到太多.
有没有人有指导开始?
谢谢.
编辑:如果您需要为单击左键添加支持,请将以下代码添加到NotifyIcon1对象,以便应用程序也不会打开弹出菜单:
Private Sub LeftClick(sender As Object, e As EventArgs) Handles NotifyIcon1.Click
'Work-around to prevent Windows from triggering Click then right-click
Dim MyButton As System.Windows.Forms.MouseEventArgs = e
If MyButton.Button = MouseButtons.Left Then
'Find how to put focus on msgbox
MessageBox.Show("Left click")
End If
End Sub
Run Code Online (Sandbox Code Playgroud) 我正在创建一个支持多语言操作系统的应用程序.在应用程序的一个地方,我使用以下代码行.
Type t = typeof(System.Windows.Forms.NotifyIcon);
BindingFlags hidden = BindingFlags.NonPublic | BindingFlags.Instance;
t.GetField("text", hidden).SetValue(notifyIcon, notificationToolTip);
Run Code Online (Sandbox Code Playgroud)
它是否可以在不同的语言操作系统上顺利运行,或者我必须更改不同语言的必填字段.例如,对于法语操作系统,我必须进行以下更改.
t.GetField("texte",hidden),SetValue(notifyIcon,notificationToopTip);
Run Code Online (Sandbox Code Playgroud) 我有这段代码在任务栏中设置了一个图标,但是当某人右击或左击它时却无法执行。有没有办法做到这一点?
//Notification
NOTIFYICONDATA nid = {};
nid.hWnd = hwnd;
nid.cbSize = sizeof(nid);
nid.uFlags = NIF_ICON | NIF_TIP | NIF_GUID;
// Note: This is an example GUID only and should not be used.
// Normally, you should use a GUID-generating tool to provide the value to
// assign to guidItem.
HICON hIcon = static_cast<HICON>(LoadImage(NULL,
TEXT("gui\\sample.ico"),
IMAGE_ICON,
0, 0,
LR_DEFAULTCOLOR | LR_SHARED | LR_DEFAULTSIZE | LR_LOADFROMFILE));
static const GUID myGUID =
{ 0x23977b55, 0x10e0, 0x4041,{ 0xb8, 0x62, 0xb1, 0x95, 0x41, 0x96, 0x36, …Run Code Online (Sandbox Code Playgroud)