【问题标题】:Can't add tab page from user control with events无法从带有事件的用户控件添加标签页
【发布时间】:2013-12-25 06:32:05
【问题描述】:

好的,我有 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

创建标签页

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的主窗体,并将其添加到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

【问题讨论】:

  • 您在 Invoke 调用中对 MainForm 的使用是问题所在。 MainForm 是一种类型,它不是对象。在 VB.NET 中很方便,但在工作线程上运行的代码中绝对致命。现在“MainForm”成为另一个 MainForm 对象的一个​​实例。一个由工作线程拥有并且不可见,因为它的 Show() 方法从未被调用过。您必须使用对用户正在查看的 MainForm 对象的正确引用。像我一样。

标签: .net vb.net multithreading events tabcontrol


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-28
    • 1970-01-01
    • 2014-02-17
    • 2012-07-23
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    • 2011-11-07
    相关资源
    最近更新 更多