12

タスク管理アプリケーションを作成しました。2人のユーザーが特定のタスクについてチャットできる機能を実装したいと思いました。

Form1送信された新しいメッセージがないかデータベースをチェックするタイマーがあります。新しいメッセージが見つかると、メッセージを示すチャットフォームが表示されます。

今まで、すべてが期待どおりに機能していますが、問題は1つだけです。

問題: 新しいメッセージが初めて見つかるとチャットウィンドウが表示されますが、別の新しいメッセージが見つかると別のウィンドウが表示され、新しいメッセージごとにチャットウィンドウの新しいインスタンスが作成されます。

私が使用しているコード:

 List<string> tasksToDiscuss = checkForTasksToDiscuss(fullname);

        if (tasksToDiscuss.Count > 0) { 
 // open the chat window directly minimized
 Form14 frm14 = new Form14();
 frm14.get_from = fullname;
 frm14.get_to = tasksToDiscuss[1];
 frm14.get_task_id = int.Parse(tasksToDiscuss[3]);
 // set message as read
 if (setMessageAsRead(tasksToDiscuss[1], fullname, int.Parse(tasksToDiscuss[3])))
                    {
                        // now show the chat window minimized
                        frm14.Show();
                    }

 }

私は行を置き換えようとしました
frm14.Show();frm14.ShowDialog();

新しいメッセージを受信するとチャットウィンドウ(form14)が表示され、同じユーザーから別のメッセージを受信すると新しいチャットウィンドウが表示されないことに気付きましたが、問題はチャットウィンドウを閉じた後に表示されないことです新しいメッセージを受信して​​も表示されなくなります。

チャットウィンドウ(Form14.Text)をユーザーのフルネームに変更し、次にメッセージを受信したときに、特定のウィンドウが既に開いているかどうかを確認し、開いていない場合は表示します。.Show()メソッドを使用してフォームを作成します。

これは、新しいメッセージを受信して​​すでに開いている場合にウィンドウが表示されないようにするための適切な方法ですか?テキスト(タイトルバーのテキスト)に従ってウィンドウが開いているかどうかを確認するにはどうすればよいですか?

私の質問を読んでくれてありがとう。どんな助けでも大歓迎です

4

2 に答える 2

18

Form14まず、新しいメッセージがあるたびに新しいインスタンスを作成します。

次にShowShowDialog2つの非常に異なることを行います。

Showはフォームを表示するだけですが、ShowDialogはフォームをモーダルダイアログとして表示します。これは、ユーザーがフォームを閉じるまで、他に何もできないことを意味します。

フォームのインスタンスを1つ持つ必要があり、Visibleプロパティを使用して、フォームが表示されているかどうかを判断できます。だからあなたは持っているでしょう:

private Form14 frm14;

次に、コンストラクターで:

frm14 = new Form14();

次に、コードで:

if (!frm14.Visible)
{
    // Add the message
    frm14.Show();
} else{
    // Top
    frm14.BringToFront();
}
于 2013-02-17T11:18:47.253 に答える
3

form14をform1のメンバーにしてみてください。新しいメッセージが表示されたら、forom14のVisibleプロパティをチェックして、すでに表示されているかどうかを確認します。

于 2013-02-17T11:16:08.123 に答える