0

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

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

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

4

4 回答 4

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);
    }
}
于 2009-11-11T17:30:17.543 回答
1

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

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

于 2009-11-11T17:21:22.517 回答
0

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

有关如何实现此目的的一些示例代码位于:

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

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

于 2009-11-11T17:27:05.673 回答
0

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

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

于 2009-11-11T17:41:36.540 回答