【发布时间】:2013-10-01 23:07:56
【问题描述】:
我在主表单上创建了一个状态条,并在其中创建了一个标签。我正在其中打开另一个表单(MdiContainer 是真的)。为了打开,我在构造函数中传递主要形式的对象,即 this。我正在更新标签的文本,但它没有得到更新。 我也尝试过无效功能。
【问题讨论】:
-
您的答案隐藏在 14 个未接受的问题中 :-)
我在主表单上创建了一个状态条,并在其中创建了一个标签。我正在其中打开另一个表单(MdiContainer 是真的)。为了打开,我在构造函数中传递主要形式的对象,即 this。我正在更新标签的文本,但它没有得到更新。 我也尝试过无效功能。
【问题讨论】:
我也遇到了这个问题。解决方法是添加一行代码来触发事件(见下面的第二行)
MainForm.mainStatusLabel.Text = "Importing data file" //see next line
Application.DoEvents()
我不完全理解为什么会这样,但我的猜测是 VB 不会在方法中间处理应用程序范围的事件,除非你告诉它。当您更改文本属性时,这是一个事件。所以 VB 会(我猜)等到方法结束后再处理事件——除非你专门告诉它用 Application.DoEvents() 处理所有事件
【讨论】:
Update() 会更新表单上的所有控件。
不要将 MainForm 的实例传递给 ChildForm,而是在 ChildForm 中定义一个自定义事件,使用要显示的消息(作为参数)引发事件,然后在 MainForm 和事件处理程序中订阅事件用消息更新控制文本。您可能还需要检查 Control.InvokeRequired。
【讨论】:
我也遇到了问题,在我的情况下,因为文本太长而无法显示(包含异常消息。)我将 SizingGrip 属性设置为“False”,所以我的文本被显示(但被中继)。
【讨论】: