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

Posted

技术标签:

【中文标题】表单的新实例覆盖现有表单变量声明【英文标题】:New Instance Of A Form Overwrites The Existing Form Variable Declaration 【发布时间】:2013-03-17 17:08:13 【问题描述】:

我正在使用 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 语句来确定当前的焦点表单来解决这个问题。但我认为有更好的方法来做到这一点。我想在我的停靠面板中拥有无限的选项卡/表单。

【问题讨论】:

【参考方案1】:

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

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

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

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

编辑:

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

【讨论】:

以上是关于表单的新实例覆盖现有表单变量声明的主要内容,如果未能解决你的问题,请参考以下文章

MS Access VBA - 声明变量时变量未定义错误

表单的声明和使用

Google Play:未显示用于删除先前声明的新 APK 权限的表单字段“合规状态”

变量“variable_name”要么未声明,要么从未赋值

表单提交时覆盖变量

如何将 C# 变量声明为 HTML 类型变量?