0

基本的に、ユーザーがログインして別のウィンドウを表示すると閉じるはずのログインウィンドウがあります。今のところ、非表示にしています(Form.Hide())が、不要なシステムリソースを使用したくないので、必要ありません。すでにログインした後のログインウィンドウ。

これは、操作を実行するコードスニペットです。

MainWindow w = new MainWindow();
        TimeRegisterApI.Instance.Windows.Add(w.Text,w);
        TimeRegisterApI.Instance.Windows[w.Text].Show();
        this.Dispose();

Windowsは、タイトルをキーとしてフォームの参照を格納する辞書です。TimeRegisterApiはシングルトンです。基本的には、ログインウィンドウを破棄するのではなく、ログイン後にアプリケーションを終了します(閉じてガベージコレクターに移動します)。

タイトルをキーとして持つと、キーエントリが重複する可能性があることは知っていますが、現在のデザインでは問題ありません。

4

2 に答える 2

1

親がメインフォームであるモーダルフォームとしてウィンドウフォームログインを作成する必要があります。これにより、(保存されたダイアログのように)回答を待ってメインウィンドウフォームに戻ることができます)これがメインフォームであるため、存在します

于 2012-08-29T09:39:09.230 に答える
0

わかりました問題を修正しました。基本的には、で実行されたウィンドウがprogram.cs破棄されると、メインウィンドウであるためプログラムが閉じられます。このウィンドウの破棄イベントでapplication.run(window)実行することは可能だと思いますが、私は次のようe.cancelに新しいウィンドウを実行して問題を解決しました。application.run

program.cs から、関連する行

 static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new LoginWindow());
        start();
    }

 public static void start()
    {
        if (TimeRegisterApI.isLoggedIn())
        {
            MainWindow w = new MainWindow();


            Application.Run(w);
        }
    }
于 2012-09-06T09:49:28.527 に答える