【问题标题】:Possibility of Implementing Minimize-to-Tray in C# in an Attribute在 C# 中在属性中实现 Minimize-to-Tray 的可能性
【发布时间】:2009-11-11 17:19:51
【问题描述】:

属性很棒。但是是否有可能创建一个 C# 属性类,当它被标记时,可以使您的应用程序最小化到系统托盘?

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

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

【问题讨论】:

    标签: c# attributes class-attributes


    【解决方案1】:

    为什么不这样做:

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

    【讨论】:

    • +1 这就像我的答案的具体化版本,哈哈,另外我喜欢你解释系统关闭和应用程序退出的方式(我总是忘记第一次发生的事情)。顺便说一句,投反对票并不难过,我也被投反对票而没有任何解释,它就这样发生了。
    • 看起来答案是否定的。我想看看 Attributes 是否可以用于更多面向方面的功能实现;但我想这不是它的真正用途。不过干杯,很棒的代码:)
    【解决方案2】:

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

    通过继承,您只需将类设置为您喜欢的行为方式,并且本质上具有选择加入或选择退出的能力(甚至使用属性来这样做)。

    【讨论】:

      【解决方案3】:

      这当然是可能的,但我建议覆盖 form close() 方法并简单地在其中放置一些最小化代码。它简单、合乎逻辑且易于未来的开发人员遵循。

      关于如何实现这一点的一些示例代码位于:

      http://www.dreamincode.net/code/snippet2660.htm

      http://www.dreamincode.net/forums/showtopic116283.htm

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-09-10
          • 2014-04-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-04-14
          相关资源
          最近更新 更多