2009-11-11 31 views
0

属性非常棒。但是,是否可以创建一个C#属性类,在添加标签时使您的应用程序最小化到系统托盘?在属性中实现C#中的最小化到托盘的可能性

从技术上讲,属性需要放在主窗体的类上。一旦用户点击X按钮,该表单不应该终止,而应该最小化到任务栏。最小化图标也应在属性中指定。

这在技术上可行吗?我无法从放置在该类上的属性中找到覆盖类代码的任何信息。 (您至少需要覆盖一种方法,以使其最小化为托盘。)

回答

2

为什么不只是这样做:

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); 
    } 
} 
+0

感谢downvote - 我知道它是谁! – 2009-11-11 17:48:04

+0

+1那像我的答案的物化版本笑,plust我喜欢你占系统关机和应用程序退出的方式(我总是忘记先去周围的事物)。顺便说一句,对于downvote不会感觉不好,我也没有解释就沮丧,只是发生了。 – 2009-11-11 17:52:58

+0

看起来答案是否定的。我正在查看是否可以将Attributes用于更多面向方面的功能实现;但我想这不是真的。尽管欢呼,伟大的代码:) – ashes999 2009-11-11 19:24:48

1

这可以通过表单继承而不是属性来实现,但仍然需要在运行时解释属性才能达到所需的效果。

有了继承你可以设置类的行为,你喜欢的并且具有实质上选择加入或退出的能力的方式(甚至使用属性这样做)。

0

这是不可能的与通常的Form类。但是可以创建一个继承自Form的自己的类,并且还支持这样的属性。但是这只会让事情变得不必要的复杂,最好为该类增加一个MinimizeToTray属性。

(如PhilipW提供的示例,但添加了一个属性用于控制行为)