属性非常棒。但是,是否可以创建一个C#属性类,在添加标签时使您的应用程序最小化到系统托盘?在属性中实现C#中的最小化到托盘的可能性
从技术上讲,属性需要放在主窗体的类上。一旦用户点击X按钮,该表单不应该终止,而应该最小化到任务栏。最小化图标也应在属性中指定。
这在技术上可行吗?我无法从放置在该类上的属性中找到覆盖类代码的任何信息。 (您至少需要覆盖一种方法,以使其最小化为托盘。)
属性非常棒。但是,是否可以创建一个C#属性类,在添加标签时使您的应用程序最小化到系统托盘?在属性中实现C#中的最小化到托盘的可能性
从技术上讲,属性需要放在主窗体的类上。一旦用户点击X按钮,该表单不应该终止,而应该最小化到任务栏。最小化图标也应在属性中指定。
这在技术上可行吗?我无法从放置在该类上的属性中找到覆盖类代码的任何信息。 (您至少需要覆盖一种方法,以使其最小化为托盘。)
为什么不只是这样做:
class TrayForm : Form
{
NotifyIcon notifyIcon = new NotifyIcon();
protected override void OnFormClosing(FormClosingEventArgs e)
{
if (e.CloseReason != CloseReason.WindowsShutDown && e.CloseReason != CloseReason.ApplicationExitCall)
{
e.Cancel = true;
this.Hide();
this.notifyIcon.Visible = true;
}
base.OnFormClosing(e);
}
protected override void OnSizeChanged(EventArgs e)
{
if (WindowState == FormWindowState.Minimized)
{
this.Hide();
this.notifyIcon.Visible = true;
}
base.OnSizeChanged(e);
}
}
这可以通过表单继承而不是属性来实现,但仍然需要在运行时解释属性才能达到所需的效果。
有了继承你可以设置类的行为,你喜欢的并且具有实质上选择加入或退出的能力的方式(甚至使用属性这样做)。
这当然是可能的,但我会建议覆盖形式close()方法,并简单地把一些最小化代码放在那里。对于未来的开发人员来说,这很简单,合理且容易。
就如何实现这一目标的一些示例代码为:
http://www.dreamincode.net/code/snippet2660.htm
和
这是不可能的与通常的Form
类。但是可以创建一个继承自Form
的自己的类,并且还支持这样的属性。但是这只会让事情变得不必要的复杂,最好为该类增加一个MinimizeToTray
属性。
(如PhilipW提供的示例,但添加了一个属性用于控制行为)
感谢downvote - 我知道它是谁! – 2009-11-11 17:48:04
+1那像我的答案的物化版本笑,plust我喜欢你占系统关机和应用程序退出的方式(我总是忘记先去周围的事物)。顺便说一句,对于downvote不会感觉不好,我也没有解释就沮丧,只是发生了。 – 2009-11-11 17:52:58
看起来答案是否定的。我正在查看是否可以将Attributes用于更多面向方面的功能实现;但我想这不是真的。尽管欢呼,伟大的代码:) – ashes999 2009-11-11 19:24:48