从另一种形式的计时器刷新形式

时间:2018-03-22 09:43:46

标签: vb.net visual-studio timer

我的代码片段有问题需要扩展和改进。这不是我原来的代码,我不能改变它的大部分逻辑,只是为了清楚。

我有一个名为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 Formfrm = frmName)。

我会很高兴任何提示或任何事情:D

谢谢你们, Vojta开发

1 个答案:

答案 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).AnyfrmCollection.Item("frmName")的组合,因为当我关闭表单并再次打开时,它会创建新的和新的实例(我不知道,为什么它没有关闭旧的,但就像我说的,这不是我的代码)。所以逻辑是,列出所需类型的所有开放形式,然后从该列表中获取最后一个实例,并为该实例调用子例程。 Me.Refresh()也放在子程序ChangeSomething()本身。

感谢大家的帮助,这肯定帮助我理解了实例如何在这里工作。