2013-02-17 72 views
8

我創建了一個任務管理應用程序,並且我想實現2用戶聊天關於特定任務的能力。檢查表單是否已顯示的正確方法?

Form1我有一個計時器,用於檢查數據庫中是否發送了任何新消息。當找到新消息時,聊天表單將顯示消息。

直到現在,一切都按預期工作,但我只有一個問題。

問題: 一經發現,第一次一個新的消息,聊天窗口出現,但被發現了另一個新的消息時,另一個窗口出現,併爲每個新的消息我聊天的新實例窗口已創建。

我正在使用的代碼:

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.ShowDialog();

我注意到,在收到新郵件時,聊天窗口(form14)是
frm14.Show();當收到來自同一用戶的另一條消息時,不會出現新的聊天窗口,但問題是,在我關閉聊天窗口後,即使收到新消息,它也不會再出現。

我想要做的是將聊天窗口(Form14.Text)更改爲用戶全名,並在下一次收到消息時,檢查特定窗口是否已經打開,然後不打開它否則我使用.Show()方法顯示錶單。

這是否正確的方法來使窗口不會出現,如果收到一條新消息,並打開它?以及如何根據文本(標題欄文本)檢查是否打開一個窗口?

感謝您花時間閱讀我的問題。任何幫助將不勝感激

回答

9

首先,您每次收到新消息時都會創建一個新的Form14實例。

其次ShowShowDialog做兩件完全不同的事情:

Show只是顯示的形式,而ShowDialog顯示形式爲模態對話框。這意味着用戶在解除表單之前不能做任何其他事情。

您需要有一個窗體的實例,您可以使用Visible屬性來確定它是否顯示。所以,你會:

private Form14 frm14; 

然後在構造函數中:

frm14 = new Form14(); 

然後在你的代碼:

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

您的代碼工作正常。但是,如果我在與其他人聊天時收到來自其他用戶的新消息,該怎麼辦? – 2013-02-17 11:52:23

+0

@ShikataGaNai在這種情況下,您可能需要一個表單列表 - 系統上每個用戶一個。將單個表單替換爲字典,或者甚至可以使其成爲用戶的正確方式。 – ChrisF 2013-02-17 11:56:17

3

嘗試使form14成爲form1的成員。 當您收到新消息時,請檢查forom14 的Visible屬性以確定它是否已顯示。

相關問題