2016-04-28 47 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

相关问题