表格的新实例将覆盖现有的表格变量声明

时间:2013-03-27 14:50:34

标签: .net vb.net winforms instance dockpanel

我正在使用Weifen Lous的Dock Panel Suite。在我的代码中,我正在为我的文本编辑器创建一个表单的新实例,我将其停靠在我的应用程序的主窗体中。 MDI亲子的东西。每次重新初始化包含表单实例的变量时,我都会遇到问题。

这是我的代码:

Private Sub AddTabPage()

        Try

            Editor = New frmEditor
            Editor.Text = "New Tab"
            Editor.Show(dpMain, DockState.Document)

        Catch ex As Exception

            MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.Information)

        End Try

    End Sub

如您所见,每次用户决定在文本编辑器中添加选项卡时,都会调用上面的代码。代码所做的是创建一个新的表单实例,它停靠在我的应用程序的主要形式中。

现在问题在于:

Private Sub Editor_ColorToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Editor_ColorToolStripMenuItem.Click

    Dim CR As New ColorDialog
    CR.ShowDialog()
    CType(Editor.rtbCode, RichTextBox).SelectionColor = CR.Color

End Sub

在上面的工具条菜单项中,我调用了我使用AddTabPage子例程创建的表单变量:(CType(Editor...)。如果只有一个表单,这可以正常工作。但是当我尝试添加另一个标签时;再次调用AddTabPage重新初始化Editor表单变量,我不能再更改先前创建的选项卡/表单(第一个选项卡/表单)上写入的文本的颜色。我相信这是因为每次添加表单时都会重新初始化Editor。之前创建的选项卡/表单正在丢失其数据/控件(第一个选项卡/表单)?我不确定,但这样的事情发生了。

现在,我想要实现的是每次创建选项卡/表单时,我仍然可以更改我将创建的每个选项卡上写入的文本的颜色。如何防止以前表单的数据/控件被覆盖/删除(对不起,我不知道使用的正确术语。)

我可以通过声明预定义数量的表单变量来解决问题,然后使用switch语句来确定当前的焦点表单。但我认为有更好的方法可以做到这一点。我希望在Dock面板中有无限制的标签/表单。

1 个答案:

答案 0 :(得分:0)

没关系。我解决了这个问题。

要访问我要停靠的表单,我使用了以下代码:

dpMain.ActiveDocument.DockHandler.Form.Controls.Item(0)

这样,我就不必明确地使用Editor

修改

Item(0)是表单中RichTextBox的索引。