停靠Windows窗体(选项卡聊天界面)

本文关键字:聊天 界面 选项 Windows 窗体 停靠 | 更新日期: 2023-09-27 17:52:13

编辑说明

我想使用tab控件;然而,我不知道如何去链接TAB控件从主表单。我假设我必须这样做:

  1. 创建一个空白TabControl的表单,不创建任何页面。
  2. 创建一个CustomuserControl (Add -> userControl),上面有我的控件。
  3. 当一个新的聊天进入,创建一个标签控制项,标签控制页,自定义控件添加到标签控制页。将选项卡控件句柄添加到散列表中,以便在新消息传入时,可以在适当的控件中引用它们。

但是,我不知道如何做到这一点。例如,我知道我可以在用户控件中创建自定义事件,因此,例如,如果每个控件都有一个"加粗"按钮,我可以在每个具有该控件的页面上实际使用该按钮。

然而我还需要注册消息回调,这样我就可以使用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/

:我如何将此代码转换为打开选项卡内部,而不是窗口?谁能给我一些建议,并帮助我。

停靠Windows窗体(选项卡聊天界面)

使用TabControl