1

メッセージボックスで小さな問題が発生しています。プログラムを直接実行すると(たとえば、ダブルクリックしてそこから使用する場合)、正常に動作します。

ダブルクリックしてプログラムを実行するよりもいくつかの.extファイルがあります(それらは私のプログラムに関連付けられています)。メッセージボックスがそこを通過すると表示されますが、最小化されているため、タスクバーで手動でクリックして表示する必要があります。

なぜこれなのか誰か知っていますか?Program.csで次のコードを実行しています。

static void Main(string[] args)
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    var MyForm = new Form1();
    if (args.Length != 0)
    {
        MyForm.RunMsg(); // this is a function I am calling
        Application.Exit();
    }
    else
        Application.Run(MyForm);
}

どんな助けでもいただければ幸いです。はい、.extファイルを実行しているときにのみメッセージボックスが最小化されていることを確認できます。

4

2 に答える 2

2

私はそれらが実際に最小化されていることを非常に真剣に疑っています。より可能性が高いのは、それらが別のアプリケーションのウィンドウの背後に隠されていることです。はい、このシナリオでは、ウィンドウをすぐに作成しないため、これが発生する可能性があります。おそらく、渡されたファイルをしばらくの間処理してから、完了したことをユーザーに伝えようとします。まだフォーカスを取得するには遅すぎますが、Windowsには、「ユーザーの顔にウィンドウを投げる」シンドロームを回避するために、これに関して非常に厳格なルールがあります。煩わしいだけでなく、ユーザーがウィンドウがあることに気付かずにマウスやキーボード操作中に誤ってウィンドウを閉じてしまう可能性があるため、失敗する可能性もあります。誤ってWindowsUpdateのインストールを開始したことがある場合は、私が何を意味するかを知っています(現在は修正されています)。

メッセージボックスは使用しないでください。フォーカスを取得して進行状況を表示できるように進行状況フォームを作成するか、NotifyIconを使用します。

于 2011-09-03T13:06:54.467 に答える
2

より良いアプローチは、次のように、コマンドラインで渡された値を表す1つまたは複数の引数を受け入れる新しいコンストラクターをフォームに追加することです。

static void Main(string[] args)
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    var parsedArgs = Parse(args);
    Application.Run(new Form1(parsedArgs));
}

この例でParse()は、は静的メソッドであり、コマンドライン引数を指定すると、ある種の適切な型を返します。コマンドライン引数が指定されていない場合、戻り値の型はnullになるか、プロパティのデフォルト値を使用してnull以外になる可能性があります。

このメソッドを使用すると、コンストラクターで渡された引数に従ってフォームが適切に動作する方法を決定できます。それでも、セットアップ、存続期間、および分解のメリットを享受Application.Run()できます。

于 2011-09-03T13:08:44.610 に答える