0

属性は素晴らしいです。しかし、タグ付けされたときにアプリケーションをシステムトレイに最小化するC#属性クラスを作成することは可能ですか?

技術的には、属性はメインフォームのクラスに配置する必要があります。ユーザーがXボタンをクリックすると、そのフォームは終了しませんが、タスクバーに最小化する必要があります。最小化するためのアイコンも属性で指定する必要があります。

これは技術的に実現可能ですか?そのクラスに配置された属性からクラスコードを上書きすることに関する情報が見つかりません。(トレイに最小化するには、少なくとも1つのメソッドを上書きする必要があります。)

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

確かに可能ですが、フォームの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 に答える