无法使用 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...")
这是我在实际应用中所做的一个简单示例
包含主要子项的表格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...")