无法使用事件从用户控件添加标签页

时间:2013-12-08 01:21:36

标签: .net vb.net multithreading events tabcontrol

好的,我有2个人可以在tabcontrol中添加标签页

  • 通讯:班级,使用活动
  • GeneralChat:UserControl,双击列表框中的名称

我这样做的方式就像这样

以下功能来自GeneralChat

双击以创建新标签页时处理

Private Sub ListConnecte_MouseDoubleClick(sender As Object, e As MouseEventArgs) Handles ListConnecte.MouseDoubleClick
    addTab(ListConnecte.SelectedItems(0)) 'I've simplified the function, but it's not passing an empty value
End Sub

创建TabPAge

Private Sub addTab(sUser As String)
    Dim tp As New TabPage(sUser)
    Dim pc As New PrivateChat(Me, weComs, sUser)

    pc.Dock = DockStyle.Fill
    tp.Controls.Add(pc)

    If (Me.InvokeRequired) Then
        Me.Invoke(New AddTabDelegate(AddressOf MainForm.addTab), tp)
    Else
        MainForm.addTab(tp)
    End If

    listChat.Add(sUser, tp)
End Sub

然后进入已创建变量TabControlChat的mainform并将其添加到TabControlChat.TabPages

所以我的问题是,当我双击时,一切正常,但当我这样称呼时

Private Sub ReceivedString_weComs(Sender As Object, e As WithParamReceivedString) Handles weComs.ReceivedString
    Select Case e.Identifier
        Case Communication.enumTags.PrivateChat
            Dim sNom() As String = e.ReceivedString.Split(New String() {"#*#"}, StringSplitOptions.RemoveEmptyEntries)

            If (Not listChat.ContainsKey(sNom(0))) Then
                addTab(sNom(0))
            Else
                RaiseEvent PrivateChatString(Me, New ReceivedStringEventArgs(e.ReceivedString))
            End If
    End Select
End Sub

所以这个函数转到了先前调用所做的相同路径,但是一个添加了tabcontrol,而且来自Communication类它没有

我真的尝试了很多,如果我不清楚,请问我更多有关调试的问题,希望你能提供帮助:S

1 个答案:

答案 0 :(得分:0)

在第二段代码中,您实际上是在引用MainForm的一个对象(实际上它是不可见的,直到您调用.show方法)。您必须使用已经对用户可见的原始MainForm。