0


0

互いに独立した状態で、同時に実行されている単一のインスタンスを複数開きます。 それが可能であれば.net windowsフォームアプリケーションで可能ですか。

基本的に私は 1対1 チャットウィンドウを持つ "。net windows Form "を使ってチャットアプリケーションを作りたいです。

4 Answer


3


はい、確かに可能です。

Form1 f1 = new Form1(); Form1 f2 = new Form1(); f1.Show(); f2.Show();


2


MyForm f1 = new MyForm(); f1.Show();

MyForm f2 = new MyForm(); f2.Show();

// etc.


1


まず、1つのアプリケーションが複数のフォームをホストしているのではなく、それぞれが同じ種類のフォームをホストしている複数のアプリケーションが一緒に実行されているのではないと思います。

個人的には、私がここで提案した戦略を使用するでしょう。

すべてのウィンドウがフォームテンプレートのインスタンスであり、すべてがアプリケーション全体をシャットダウンする機能を共有し、すべてのフォームが参照している単一の静的クラスを通じてフォーム間の通信を処理できるというアプローチを使用してソリューションを実装しました。メッセージディスパッチャとして機能します。

たとえば、各フォームにTextBoxがある場合は、テンプレートなどからそのフォームを作成するときに、静的クラスの何らかのデータ構造にフォームのTextBoxへの参照を追加します。

(おそらく

リスト

または

辞書

)

それは単なる非常に広範な提案であり、あなたが必要とするものの多くはまさしくあなたが「通信する」という言葉によって意味するものに依存するでしょう。スタティックディスパッチャクラスがサブスクライブするイベントを発生させるTemplateFormでカスタムイベントを定義するなどのことができます。それから、 "ディスパッチャ"がそのイベントを取得すると、他のすべてのフォーム、または一部のフォームなどに "ブロードキャスト"できます。 繰り返しますが、これらはあなたができることの広いスケッチです。

私の視点から見ると、この方法では、最後のフォームを閉じてアプリケーションを確実に終了させるために、フォームを閉じるイベントを確実に処理するだけで済みます。

「すべてのフォームが等しい」デザインがアプリケーションのニーズに合っているかどうか。私は知りません:あなたが望むなら一つだけの「マスターフォーム」を作り、そしてそのフォームだけがアプリをシャットダウンできるようにしながらあなたはまだこのアプローチを使うことができます(それであなたは各フォームの可能性について心配する必要はありません)アプリケーションを「空の状態で実行中」のままにして閉じます。

私はこのアプローチを使って友人のためにアプリケーションを作りました。そこには、基本的に4つの「ビュー」を持つ1つの「マスターフォーム」がありました:起動スクリーン、設定ダイアログ、アプリケーションの現在の状態を示す状態概要スクリーン「他のどのTemplateFormにも、そして最後に、「これですべての人」の画面になります:)

ベスト、


0


確認してください、あなたはダイアログ手段としてフォームを表示していません

Form3 objForm = new Form3(); objForm.ShowDialog();

この状態では、フォームを閉じるのを待ってから次の行を実行します。