2013-02-17 1 views
8

私はタスクマネージメントアプリケーションを作成しました。私は、2人のユーザーが特定のタスクについてチャットする機能を実装したいと考えていました。フォームがすでに表示されているかどうかを確認する適切な方法はありますか?

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

これまでのところ、すべてが正常に機能していましたが、問題は1つのみです。

問題: を初めて見出し、新しいメッセージたら、チャットウィンドウが表示されますが、別の新しいメッセージが発見された場合、別のウィンドウが表示され、それぞれの新しいメッセージのために私はチャットの新しいインスタンスを持っていますウィンドウが作成されました。

私が使用しているコード:私は、新しいメッセージを受信したときに、チャットウィンドウ(form14)があることに気づいfrm14.ShowDialog();


frm14.Show();:私はラインを交換しようとした

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(); 
        } 

} 

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

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

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

私の質問を読んでいただきありがとうございます。どんな助けでも高く評価されます

答えて

9

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

第二ShowShowDialog 2つの非常に異なるものの操作を行います。

ShowShowDialogはモーダルダイアログとしてフォームを表示するのに対してだけ、フォームが表示されます。つまり、ユーザーはフォームを閉じるまで何もできません。

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

private Form14 frm14; 

を:

frm14 = new Form14(); 

次に、あなたのコードに:予想通り

if (!frm14.Visible) 
{ 
    // Add the message 
    frm14.Show(); 
} else{ 
    // Top 
    frm14.BringToFront(); 
} 
+0

あなたのコードに取り組んでいます。しかし、すでに他のユーザーとチャットしている間に別のユーザーから新しいメッセージを受け取ったらどうなりますか? –

+0

@ ShikataGaNaiその場合は、おそらくフォームのリスト(システム上のユーザー1人)が必要です。単一のフォームを辞書に置き換えるか、おそらくそれをユーザーの適切なものにすることさえできます。 – ChrisF

3

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