jlu*_*e50 45 .net c# systray visual-studio-2008 winforms
我已经成功创建了一个应用程序,使用NotifyIcon最小化托盘.手动关闭表单后,它将成功从桌面,任务栏和alt-tab中隐藏.尝试最小化应用程序时,会出现此问题.起初问题是应用程序将被最小化但仍会出现在alt-tab对话框中.将FormBorderStyle更改为ToolWindow选项之一(来自"None"选项)修复此问题,但引入了另一个问题.当应用程序首次启动时,在开始菜单上方可以看到最小化窗口的标题栏:
打开表单并关闭它会使其正确隐藏.我尝试了很多变化,但这里基本上它是如何正常工作的......
WindowState在Designer中设置为Minimized.在构造函数中进行一些初始化后,我有以下几行:
this.Visible = false;
this.ShowInTaskbar = false;
Run Code Online (Sandbox Code Playgroud)
双击NotifyIcon时,我有以下内容:
this.WindowState = FormWindowState.Normal;
this.Visible = true;
this.ShowInTaskbar = true;
Run Code Online (Sandbox Code Playgroud)
就像我说的那样,我已经尝试过很多小的变化(this.Hide()等).有没有办法让NotifyIcon成为主要组件,这样我可以完全启动并处理表单,同时让NotifyIcon运行?必须有一种方法来启动应用程序与最小化的形式没有任何奇怪.请帮帮我找到它!
Han*_*ant 79
正确的方法是防止表单首先显示.这需要重写SetVisibleCore().让我们假设NotifyIcon的上下文菜单带有Show and Exit命令.您可以像这样实现它:
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
notifyIcon1.ContextMenuStrip = contextMenuStrip1;
this.showToolStripMenuItem.Click += showToolStripMenuItem_Click;
this.exitToolStripMenuItem.Click += exitToolStripMenuItem_Click;
}
private bool allowVisible; // ContextMenu's Show command used
private bool allowClose; // ContextMenu's Exit command used
protected override void SetVisibleCore(bool value) {
if (!allowVisible) {
value = false;
if (!this.IsHandleCreated) CreateHandle();
}
base.SetVisibleCore(value);
}
protected override void OnFormClosing(FormClosingEventArgs e) {
if (!allowClose) {
this.Hide();
e.Cancel = true;
}
base.OnFormClosing(e);
}
private void showToolStripMenuItem_Click(object sender, EventArgs e) {
allowVisible = true;
Show();
}
private void exitToolStripMenuItem_Click(object sender, EventArgs e) {
allowClose = true;
Application.Exit();
}
}
Run Code Online (Sandbox Code Playgroud)
注意Load事件的皱纹,在首次显示主窗体之前不会触发.所以一定要在表单的构造函数中进行初始化,而不是Load事件处理程序.
Yog*_*esh 17
在构造函数中,删除以下两行:
this.Visible = false;
this.ShowInTaskbar = false;
Run Code Online (Sandbox Code Playgroud)
并添加InitializeComponent();:
this.WindowState = FormWindowState.Minimized;
Run Code Online (Sandbox Code Playgroud)
在设计中,设置ShowInTaskbar到false&FormWindowState来Normal.
编辑: 如果您在Load事件中发布相同的内容,窗口会尽量减少,但在桌面上仍显示最小化.我认为这是一个错误.
Ale*_*lex 16
我正在阅读所有的答案,看到黑客和黑魔法......(没有冒犯,伙伴)
伙计们,不需要黑客.你甚至不需要设置"ShowInTaskbar = false"和其他东西.这样做:
//"Form Shown" event handler
private void Form_Shown(object sender, EventArgs e)
{
//to minimize window
this.WindowState = FormWindowState.Minimized;
//to hide from taskbar
this.Hide();
}
Run Code Online (Sandbox Code Playgroud)
注意:我强烈建议不要触摸"ShowInTaskbar"属性.例如,如果您的应用程序注册系统范围的热键或其他类似的东西(钩子等) - 设置ShowInTaskBar = false并最小化您的应用程序将阻止Windows向您的窗口发送一些消息...并且您的钩子/热键/等将停止工作.
| 归档时间: |
|
| 查看次数: |
47344 次 |
| 最近记录: |