vb.net textbox.text未更新

vb.net textbox.text未更新,vb.net,Vb.net,在使用VB的VS2015中,我有一个winform,它使用另一个winform(从类实例化)作为消息显示,以显示表中一系列行的当前状态。当我第一次更新消息显示并显示它时,textbox会显示消息,但是后续更新textbox的调用无法显示(我在第一次启动表单时允许设置textbox.text,但此处不使用该选项)。我在调试器中跟踪了该操作,并且在MessageText的set方法中正确更新了txtStatus.text属性-它只是不显示。奇怪的是,如果我将textbox的.tabstop设置为fa

在使用VB的VS2015中,我有一个winform,它使用另一个winform(从类实例化)作为消息显示,以显示表中一系列行的当前状态。当我第一次更新消息显示并显示它时,textbox会显示消息,但是后续更新textbox的调用无法显示(我在第一次启动表单时允许设置textbox.text,但此处不使用该选项)。我在调试器中跟踪了该操作,并且在MessageText的set方法中正确更新了txtStatus.text属性-它只是不显示。奇怪的是,如果我将textbox的.tabstop设置为false,textbox根本不显示任何数据。第二个(可能与此相关)问题是,我在消息表单上也有一个按钮,该按钮根本无法显示(屏幕上显示的是按钮所在的白色框)。按钮没有什么不寻常的地方,我只设置了.text属性。就好像我创建了多个MSSGlass实例并更新了错误的实例一样,但据我所知,我只实例化了一个实例

我已经查阅了所有关于这个问题的文档和问题,但没有找到解决方案

以下是呼叫表单的代码:

公共类myform

.
.
Dim oMessage As New MssgClass("")
For nIndex As Integer = 0 To oDataSet.Tables(0).Rows.Count - 1
    .
    .
    oMessage.MessageText = "My Message"
    oMessage.Show()
    .
    ' index this table - MyIndex is a com object MyIndex.dll
    iIndexed = MyIndex.IndexFile("the table name")
    '

Next
oMessage.close()
末级

下面是MssgClass的代码:(保存一个名为txtStatus的文本框)

公共类MssgClass

Public Property MessageText() As String
    Get
        Return Me.txtStatus.Text
    End Get
    Set(ByVal pcMssg As String)
        Me.txtStatus.Text = pcMssg
        Me.txtStatus.Show()
    End Set
End Property

Public Sub New(ByVal pcMssg As String)
    InitializeComponent()
    Me.txtStatus.Text = pcMssg
End Sub
末级

MssgClass窗体设置了固定对话框的边框样式, controlbox为false(除了我提供的按钮之外,我不希望用户可以操作任何控件),topmost为true。以下是InitializeComponent方法:

私有子初始化组件()

端接头


我假设我在MSSG课堂上做了什么(或者没做什么),我只是不知道是什么。任何帮助都将不胜感激

这主意很有趣,但会发生在哪里呢?My.close调用发生在更新发生的for循环之外。此外,消息表单始终显示-关闭的表单是否仍能显示?猜测您正在关闭表单而不再显示它。您可能希望使用ShowDialog。我认为ShowDialog会停止调用表单方法的进程,直到从被调用的表单启动返回。在这种情况下,我需要调用表单方法在显示消息表单时继续处理。否则,用户将被迫单击“确定”按钮,以允许处理每个记录。没有?当然,但是把你的信息框放在这个循环中有什么意义呢?用户将只看到循环中最后一项的消息。发生的过程是索引,对于具有许多索引的大型表,这可能需要时间。这样做的目的是让用户一个表一个表地了解进度(我认为,在这种情况下,进度条是不够的)。用户应该可以看到显示的每个表名(除非它是一个索引很少的小表,否则将对其进行处理以快速显示)
Me.txtStatus = New System.Windows.Forms.TextBox()
Me.Button1 = New System.Windows.Forms.Button()
Me.SuspendLayout()
'
'txtStatus
'
Me.txtStatus.BackColor = System.Drawing.SystemColors.Control
Me.txtStatus.BorderStyle = System.Windows.Forms.BorderStyle.None
Me.txtStatus.Font = New System.Drawing.Font("Arial", 12.0!, 
   System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 
   CType(0, Byte))
Me.txtStatus.Location = New System.Drawing.Point(25, 22)
Me.txtStatus.Multiline = True
Me.txtStatus.Name = "txtStatus"
Me.txtStatus.Size = New System.Drawing.Size(414, 20)
Me.txtStatus.TabIndex = 0
Me.txtStatus.Text = "Textbox"
Me.txtStatus.TextAlign = System.Windows.Forms.HorizontalAlignment.Center
'
'Button1
'
Me.Button1.Font = New System.Drawing.Font("Arial", 12.0!, 
    System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 
    CType(0, Byte))
Me.Button1.Location = New System.Drawing.Point(174, 59)
Me.Button1.Name = "Button1"
Me.Button1.Size = New System.Drawing.Size(118, 35)
Me.Button1.TabIndex = 1
Me.Button1.Text = "Cancel"
Me.Button1.UseVisualStyleBackColor = True
'
'MssgClass
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(474, 115)
Me.ControlBox = False
Me.Controls.Add(Me.Button1)
Me.Controls.Add(Me.txtStatus)
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog
Me.MaximizeBox = False
Me.MinimizeBox = False
Me.Name = "MssgClass"
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
Me.TopMost = True
Me.ResumeLayout(False)
Me.PerformLayout()