我正在为第三方网络开发一个独立的聊天应用程序。我能够登录并在用户之间发送和接收消息。我坚持的是拥有多个标签,每个标签与特定用户进行通信。
我有一个包含用户列表的表单和一个选项卡控件,该控件具有用于启动命令的主区域,例如更改昵称和设置状态。要开始聊天,用户将双击用户列表中的用户,并打开一个新选项卡。这就是我被卡住的地方。
我相信我已经走上了正轨,但不知道接下来要去哪里。我使用带有选项卡控件的UserControl为新的聊天会话创建一个TabPage。
ChatPage.cs:
public partial class ChatPage : UserControl
{
public static string id;
public ChatPage (string name, string idd)
{
id = idd;
InitializeComponent ();
this.friendPage.Text = name;
this.friendBox.KeyDown += new KeyEventHandler (friendBox_KeyDown);
}
public void friendBox_KeyDown(object sender, KeyEventArgs e) {
if (e.KeyCode == Keys.Enter)
{
switch (this.friendBox.Text) {
default:
// Code for sending the chat message
break;
}
this.friendBox.Clear ();
}
}
}
要打开标签,我会在主要表单中执行此操作:
Main.cs
private void NewTab (string name, SteamID id)
{
var userControl = new ChatPage (name, id);
tabControl1.TabPages.Add (userControl.tabControl1.TabPages[0]);
}
只要我只与一个用户通信,这就可以正常工作。
但是,当我打开与不同用户的会话时,所有页面中的控件(而不仅仅是新页面)都会更改以反映新创建的会话。在任何选项卡中发送或接收的消息都会发送给最近创建会话的用户。
我正在寻找一种方法来打开多个标签,并让每个标签都针对不同的用户。
我环顾四周,并没有找到解决方案。我很难过。
答案 0 :(得分:0)
我看不出userControl.tabControl1.TabPages[0]
是什么。但是你通常应该以这样的方式添加标签页和控件:
private void NewTab (string name, SteamID id)
{
var userControl = new ChatPage (name, id);
TabPage newTab = new TabPage(name);
newTab.Controls.Add(userControl);
tabControl1.TabPages.Add(newTab);
}