无法使用 class 文件更新 ToolStrip

Unable to update ToolStrip using class file

这是我在实际应用中所做的一个简单示例

包含主要子项的表格OpenNew.vb

第 1 步 - 主要提示用户使用同一文件中的对话框进行输入 (OpenNew.vb) 第 2 步 - 用户选择他们打开的项目类型,类型 1 或类型 2 第 3 步 - 关闭 OpenNew 对话框时填充 strOpenNewResponse 第 3 步 - 根据选择打开表格

Public Class OpenNew

    Public Shared strOpenNewResponse As String = Nothing

    Public Shared Sub Main()

        OpenNew.ShowDialog()

    If strOpenNewResponse IsNot Nothing Then

        Dim formToShow As Form = Nothing

        Select Case strOpenNewResponse
            Case "Type1"
                formToShow = New Form1
                formToShow.ShowDialog()
            Case "Type2"
                formToShow = New Form2
                formToShow.ShowDialog()
        End Select

    End If
End Sub
End Class

Form1 将有一个带有一个 ToolStrip 和一个 TreeView 的 StatusBar:

Public Class Form1

Inherits Form

Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles Me.Shown

    Utilities.DisplayStatus("Loading, Please Wait...")

    Me.Cursor = Cursors.WaitCursor

    PopulateTreeView("Root Node")

    Utilities.DisplayStatus("Process Complete")

    Me.Cursor = Cursors.Default

End Sub

End Class

然后 Class 文件被命名为 Utilities.vb

Public Class Utilities

Public Shared Sub DisplayStatus(ByVal strStatusMessage As String)

    Form1.toolstripDisplayStatus.Text = strStatusMessage
    Form1.toolstripDisplayStatus.Visible = True
    Form1.statusstripParent.Refresh()

End Sub

End Class

当我这样做时,ToolStrip 项目永远不会更新。它只是保持默认值。

当然如果我运行这样(没有class)

Public Class Form1

Inherits Form

Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles Me.Shown

    Me.Cursor = Cursors.WaitCursor

    toolstripDisplayStatus.Text = "Loading, Please Wait..."
    toolstripDisplayStatus.Visible = True
    statusstripParent.Refresh()

    PopulateTreeView("Root Node")

    toolstripDisplayStatus.Text = "Process Complete"
    toolstripDisplayStatus.Visible = True
    statusstripParent.Refresh()

    Me.Cursor = Cursors.Default

End Sub

End Class

我认为这可能是某种 Public/Private 冲突的问题,但我似乎仍然无法弄清楚。

此时我可能只是被显而易见的东西蒙蔽了双眼

谁能告诉我是什么原因造成的?

为 soohoonigan 添加了一个屏幕截图

formToShow = Form1 会起作用(删除新的)

您的实用程序 class 直接引用 Form1,但您只有一个实例。或者,如果您需要 Form1 的多个实例,您可以像这样将表单传递给 Sub:

Public Shared Sub DisplayStatus(ByVal temp As Form1, ByVal strStatusMessage As String)

    temp.toolstripDisplayStatus.Text = strStatusMessage
    temp.toolstripDisplayStatus.Visible = True
    temp.statusstripparent.Refresh()

End Sub

并这样称呼它:

Utilities.DisplayStatus(Me, "Loading, Please Wait...")