从另一个表单的计时器刷新表单



我对代码片段有问题,我必须扩展和改进。这不是我的原始代码,我无法更改其中的逻辑,只是为了清楚。

我有一个名为 MDIServer 的主窗体,它每秒都有一个计时器设置。在 Timer.Tick 中,我还有其他一些工作正常的代码(计时器运行正常)。新,我必须在那里检查,如果一个表单处于活动状态,如果是,请更改该表单中的一些内容(标签文本和标签)并刷新它。

我在那里添加此代码:

If IsActiveForm("frmName") Then
frmName.ChangeSomething()
End If

子更改是,你如何看到,位于我想要刷新和进行更改的表单中。在该函数中,我只需更改几个控件的标签文本和标签。

我的问题是:表单不刷新=>标签不可见更改,为什么?

我想我已经在 ChangeSomething() 函数或调用此函数后的计时器中使用 Refresh() 函数尝试了几乎所有内容。我还尝试在那里添加新的计时器(在 frmName 中)并在那里进行更改,这与

Label.Text = "something new"
Label.Refresh()

所以我想问题出在计时器的刷新形式不同的地方。我还尝试使用我自己的 InvokeReguired() 函数等来做到这一点......

附言当我调试代码时,标签和标签正在更改,并且必须调用的每个函数都被调用,但它只是在窗体本身上不可见。

编辑信息formName没有在 MDIServer 中明确声明,在这种情况下和许多其他情况下,表单被用作默认实例。计时器来自System.Windows.Forms.Timer。 此外,MDIServer不是formName的MDIParet,我不能使用Me.ActiveMdiChild Is。这么说吧,这两种形式在任何方面都不相互依赖。一切都是通过表单的名称完成的(默认实例,所以没有像Dim frm As Formfrm = frmName那样)。

我会很高兴得到任何提示或任何:D

谢谢大家, 沃伊塔

因此,经过一些研究,我解决了我的问题,问题是(预期的)我没有为表单frmName的一个特定实例调用子例程ChangeSOmething()。所以我不得不更改我的代码,我将完全为活动且可见的实例调用它。

新代码如下所示:

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()本身中。

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

最新更新