2016-04-28 73 views
0

前奏如何分別與用戶打開多個聊天窗體,但是會阻止已經打開的窗體?

起初,對不起我的英語不好。 :)

我讀過類似問題的語氣,但沒有一個提供瞭解決方案,我的問題,或者我只是愚蠢的。 :)

問題

我怎麼會打開一個新的聊天形式User1交談,並保留打開從「用戶列表」中的其他用戶聊天形式的可能性,但塊打開一個聊天的形式與已經打開的用戶?

我試圖找到這個東西,但無論我嘗試,它總是相同的(我可以一次又一次地打開相同的形式)。因此,例如,我可以用User1打開一個聊天表單,我可以與他交談,也可以用User2打開一個新的聊天表單,我可以與他交談。但我也可以打開多個窗體與User1和User2以及等

另外,我需要通過一些數據從MainForm形式TalkForm,所以作爲原型我創建此代碼,我試圖列出,但我「M不知道如何來檢查形式確實在列表中存在:

List<TalkForm> b = new List<TalkForm>(); 
    private void TextBoxConnectedClients_MouseDoubleClick(object sender, MouseEventArgs e) 
    { 
     if (TextBoxConnectedClients.SelectedIndex == -1) 
     { 
      return; 
     } 
     int index = this.TextBoxConnectedClients.IndexFromPoint(e.Location); 
     if (index != System.Windows.Forms.ListBox.NoMatches) 
     { 
      string username = TextBoxConnectedClients.SelectedItem.ToString(); 
      TalkForm a = new TalkForm(im, username, displayname); 
      b.Add(a); 
      a.Show(); 
     } 
    } 

可有人請給我一些例子或者告訴我什麼,我做錯了什麼?謝謝。

回答

1
List<TalkForm> b = new List<TalkForm>(); 

您正在使用此列表來跟蹤爲每個唯一用戶打開的表單。我會更新你的代碼來檢查表單對象是否已經被添加。您需要添加using System.Linq

if (index != System.Windows.Forms.ListBox.NoMatches) 
{ 
    string username = TextBoxConnectedClients.SelectedItem.ToString(); 

    // Check if form is already opened. Username will be unique. 
    var form = b.firstOrDefault(f => f.Username == username); 
    if (form == null) // Show new form 
    { 
     TalkForm a = new TalkForm(im, username, displayname); 
     b.Add(a); 
     a.Show(); 
    } 
    else // Activate already opened form 
    { 
     form.BringToFront(); 
    } 
} 

您需要公開TalkForm.Username屬性,如果它在的地方是不是已經。並用username參數在構造函數中初始化該屬性。

注意:在關閉特定用戶的表單時,請確保您的Remove列表爲b

編輯:按照@ Draken的建議更新了代碼以顯示已打開的表單。

+0

得到這個錯誤: '「無法隱式轉換類型‘字符串’到‘布爾’」' '不能lambda表達式轉換爲預期的委託類型,因爲一些塊的返回類型不 隱式轉換爲代理返回類型「' – Gogo

+0

我的不好。單一'='比較是一個罪魁禍首。更新上面的代碼。 – niksofteng

+1

你也可以添加一個else語句,而不是調用當前聊天窗口到前面,使用['Control.BringToFront'](http://msdn.microsoft.com/en-us/library/system.windows.forms.control.bringtofront.aspx): 'TalkForm form = b.firstOrDefault(t = > t.Username == username); if(form!= null){form; BringToFront();}' – Draken

相關問題