停靠Windows窗体(选项卡聊天界面)
本文关键字:聊天 界面 选项 Windows 窗体 停靠 | 更新日期: 2023-09-27 17:52:13
编辑说明
我想使用tab控件;然而,我不知道如何去链接TAB控件从主表单。我假设我必须这样做:
- 创建一个空白TabControl的表单,不创建任何页面。
- 创建一个CustomuserControl (Add -> userControl),上面有我的控件。
- 当一个新的聊天进入,创建一个标签控制项,标签控制页,自定义控件添加到标签控制页。将选项卡控件句柄添加到散列表中,以便在新消息传入时,可以在适当的控件中引用它们。
但是,我不知道如何做到这一点。例如,我知道我可以在用户控件中创建自定义事件,因此,例如,如果每个控件都有一个"加粗"按钮,我可以在每个具有该控件的页面上实际使用该按钮。
然而我还需要注册消息回调,这样我就可以使用MessageGrabber发送数据给它,这不是在UserControl中分配的,这是在新窗口进来时以编程方式分配的;但由于我没有可参考的控件,所以我不能分配。
<
吻哲学/strong>
像我现在这样创建表单,然后将窗体停靠在窗口或其他地方不是更容易吗?所以,本质上,它仍然在创建表单,但它也是一个单独的窗口?
原始问题
好吧,所以我被难住了(当涉及到复杂的c#逻辑时,这并不奇怪,哈哈)!我想做的是:
目标:为新的聊天应用程序设置选项卡聊天。
Completed:每当收到聊天消息或用户向花名册请求新的聊天时,打开新窗口。这是完美的工作,并打开一个窗口,当用户还没有打开聊天。很高兴在那里。
问题:我不想要windows。好吧,我确实想要一个窗口,但我不想要一大堆独立的窗口。例如,我们的客户服务团队可能同时有大约10个活动的IM窗口,我不希望他们有10个窗口。我宁愿他们有一个单独的私人IM窗口,所有10个选项卡都停靠在窗口内。
:这是我的逻辑在这里,这可能是有缺陷的,我道歉:
- OnMessage:打开一个新的聊天窗口,如果一个不存在;如果存在,在当前聊天窗口中将其作为选项卡打开。
- SendMessage: ^^ ditto ^^
代码示例:
if (!Util.ChatForms.ContainsKey(msg.From.Bare))
{
RosterNode rn = rosterControl1.GetRosterItem(msg.From);
string nick = msg.From.Bare;
if (rn != null)
nick = rn.Text;
frmChat f = new frmChat(msg.From, xmpp, nick);
f.Show();
f.IncomingMessage(msg);
return;
}
上面的注释:函数只跟踪在哈希表中打开的窗口,这样,当消息传入时,它们会路由到适当的窗口。加上:
Util.ChatForms.Add(m_Jid.Bare.ToLower(), this);
frmChat()表单中的命令
正在使用的库: agsxmpp from: http://www.ag-software.de/agsxmpp-sdk/download/
:我如何将此代码转换为打开选项卡内部,而不是窗口?谁能给我一些建议,并帮助我。
使用TabControl