【问题标题】:vb.net activated fires multiple timesvb.net 激活触发多次
【发布时间】:2011-09-22 02:47:01
【问题描述】:

我想根据当前激活的表单更新数据库。我最初决定使用 GotFocus 事件。但是我现在明白这不起作用,因为表单上有控件。所以我想我会使用激活的事件。这有效,但似乎多次触发。我输入了以下代码:

Private Sub frmNewTicket_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Activated
    MsgBox("Form Activated")
End Sub

我选择表单并激活它,消息框出现大约 15 次。

为什么要这样做?我该如何处理。我只希望我的代码在表单被激活时执行一次。

注意:用户将在几种表单之间进行更改,包括来自其他应用程序的表单。

【问题讨论】:

  • 从我得出的您的问题中,您想为活动表单做一次“某事”吗?也许事件 LOAD 或 FORMCLOSING 是您正在寻找的。加载在表单第一次显示之前执行,用户尚不可见。 FormClosing 在用户(或代码)决定关闭窗口时执行,仍然可见。

标签: vb.net winforms


【解决方案1】:

每次单击消息框上的OK 时,表单都会重新获得焦点并再次激活。

在您的frmNewTicket_Activated 中添加一个静态的Boolean 值,就像有人发布here 一样:

Static HasRan As Boolean=False
If Not HasRan Then
    HasRan=True
    'put code here
End If

【讨论】:

  • 您好,感谢您的回复。我试过这个,但这没有任何区别。老实说,我也不明白为什么会这样。每次事件触发时,HasRan 都将设置为 False,因此在进一步测试代码时将设置为 false。如果我将 HasRan 的声明移到其他地方,那么它只会触发一次。我想我必须在那里遗漏一些东西,因为我不明白它是如何工作的。但无论如何,你已经帮助解决了这个问题。我使用 msgbox 只是为了测试它是否正在触发。我已经删除了消息框,它可以按需要工作。谢谢
  • @Stephen 当你给一个静态变量一个这样的初始值时,它只在第一次运行 _Activated 方法时被赋值,而不是每次运行。我很高兴你让它按你的意愿工作。要让它以这种方式工作可能需要进行一些调整,因为激活表单后发生的事情很重要。
  • @AndreSilva 感谢您的提醒!
【解决方案2】:

听起来您每次激活表单时都想做一些事情。 Form Activated 事件将正常工作,只要您正在做的事情不会从 Form 拉焦点,然后当表单再次获得焦点时将触发另一个 Activation 事件。尝试使用 MessageBox 以外的其他东西进行测试,例如 Beep 或更改表单的颜色

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-30
    • 2021-06-28
    • 2011-10-14
    • 2011-01-21
    相关资源
    最近更新 更多