-1

要件

設定ウィンドウ (メニューからアクセス可能) を持つ WinForms アプリケーション。その上で、アプリケーションの実行時に、アプリケーションのウィンドウを表示する前に、設定ウィンドウを最初に表示する必要があります。(これにより、ユーザーはアプリケーションを実行するたびに設定を確認/変更する必要があります)。

これまでの私の実装

とがMainFormありSettingsFormます。にはSettingsForm、ウィンドウを閉じるときに内部的に保存されるいくつかの入力フィールドがあります。MainFormを開くためのメニュー エントリが にありますSettingsFormSettingsForm(メニューエントリを介して)表示するには、次のように呼び出します。

SettingsForm settingsForm = new SettingsForm();
settingsForm.Owner = this;
settingsForm.ShowDialog();

を表示するSettingsForm前にを表示するために、他の処理を行う前MainFormに で上記のコードを呼び出しMainForm_Load()ます。

問題

アプリケーションを実行すると、SettingsFormが表示されます。しかし、2〜3秒後にフリーズします。

SettingsForm「静的」です。その唯一のアクションは、ウィンドウを閉じるときに入力ファイルの値を保存することです。

[編集] 問題は、 に存在する によって生成されTimerましたMainForm。したがって、全体的な設計は問題なく、有効なソリューションとして使用できます。

4

1 に答える 1

0

私のすべてのプロジェクトには、設定/ユーザーログイン画面がありました。これを防ぐために私が行うことは、実際のメインフォームを非表示に開くことですが、FormLoad() 内で、入力が必要なすべての画面でダイアログの表示を呼び出します。次に、すべてのdialogresultをチェックして、それらが有効かどうかを確認して、メインフォームのformload()を続行します。通常、残っているのは、そのメインフォームにある可能性のあるダッシュボード要素にフィルターを適用し、最終的にフォームを表示に戻すことです。

画面のちらつきの原因となるため、可視性ではなく不透明度を使用する必要があることも付け加えておきます。平均的なビジネス コンピューターではかなり遅いことに気付きました。設計時にプロパティ グリッドのデフォルトの可視性を visible = false に設定すると、formLoad() が呼び出されたときにフォームが実際に表示されますが、その後プロパティが表示され、後で非表示になります。 . ビデオ カードを搭載した 1.8/2.0 GHz のコンピュータでは、load メソッドで大量のものをロードしない限り、これほど多くは表示されません。個人的な結果の経験からわかるように、フォームのレンダリングの前に不透明度を0に設定します(ペイントなどのオーバーライドを実際にチェックしませんでした)。そのため、開始時に非表示にする必要がある場合は、可視性の使用をやめ、代わりに不透明度を使用しました。

于 2013-09-17T11:58:02.757 に答える