我的代码片段有问题需要扩展和改进。这不是我原来的代码,我不能改变它的大部分逻辑,只是为了清楚。
我有一个名为MDIServer的主要表单,它每秒都设置一个计时器。在Timer.Tick我有一些其他代码工作正常(计时器运行正常)。最近,我必须检查那里,如果一个表单是活动的,如果是,则更改该表单中的一些内容(标记文本和标签)并刷新它。
我在那里添加了这段代码:
If IsActiveForm("frmName") Then
frmName.ChangeSomething()
End If
Sub ChangeSomething是,您可以看到的,位于我想要刷新的表单中并进行更改。在该功能中,我只需更改少量控件的标签文本和标签。
我的问题是:表单不刷新=>标签不可见已更改,为什么?
我想在调用此函数后,我已经在ChangeSomething()函数或计时器中尝试了几乎所有的Refresh()函数。此外,我尝试添加新计时器(在frmName中)并在那里进行更改,与
完美配合Label.Text = "something new"
Label.Refresh()
所以我猜问题是以某种形式来自Timer的刷新形式。我也尝试使用我自己的InvokeReguired()函数等...
P.S。当我调试代码时,标签和标签正在改变,并且每个必须调用的函数都会被调用,但它在表单本身上是不可见的。
编辑信息
formName
未在MDIServer中明确声明,在这种情况下和许多其他情况下,表单用作默认实例。计时器来自System.Windows.Forms.Timer
。此外,MDIServer不是formName
的MDIParent,我无法使用Me.ActiveMdiChild Is
。让我们说,这两种形式不以任何方式相互依赖..而且一切都是通过表单的名称完成的(默认实例,所以没有像Dim frm As Form
和frm = frmName
)。
我会很高兴任何提示或任何事情:D
谢谢你们, Vojta开发
答案 0 :(得分:0)
所以,我在经过一些研究后解决了我的问题,问题是(预期)我没有为ChangeSOmething()
形式的一个特定实例调用子例程frmName
。因此,我不得不更改我的代码,我将完全称为活动且可见的实例。
新代码如下所示:
Dim frmCollection = Windows.Forms.Application.OpenForms
Dim listfrmname = frmCollection.OfType(Of frmName).ToList()
If listfrmName.Count > 0 Then
Dim tmpFrm As frmName = listVZT15.Last()
tmpFrm.ChangeSomething()
End If
我也无法使用frmCollection.OfType(Of frmName).Any
和frmCollection.Item("frmName")
的组合,因为当我关闭表单并再次打开时,它会创建新的和新的实例(我不知道,为什么它没有关闭旧的,但就像我说的,这不是我的代码)。所以逻辑是,列出所需类型的所有开放形式,然后从该列表中获取最后一个实例,并为该实例调用子例程。 Me.Refresh()
也放在子程序ChangeSomething()
本身。
感谢大家的帮助,这肯定帮助我理解了实例如何在这里工作。