Vb.NET Windows窗体焦点事件

Vb.NET Windows窗体焦点事件,vb.net,winforms,forms,Vb.net,Winforms,Forms,我正在使用.Net Windows窗体应用程序(vb.Net), 我有两张表格 表格A=主表格 表单B=通过单击表单a上的按钮调用 问题是,当我的表单A被激活时,我想更新某些控件(列表、网格), 在Form_A_Load中,它将加载必须加载的控件,但当我打开Form B并退出Form B时,我想重新加载Form A的控件(列表、网格) 我尝试过很多项目 激活、停用、进入、离开、启用、可见性更改,但无法捕获任何, 如果我使用带有某个标志的“已激活/已停用”来检查哪一个已触发,则会发生“继续”循

我正在使用.Net Windows窗体应用程序(vb.Net), 我有两张表格

  • 表格A=主表格

  • 表单B=通过单击表单a上的按钮调用

问题是,当我的表单A被激活时,我想更新某些控件(列表、网格), 在Form_A_Load中,它将加载必须加载的控件,但当我打开Form B并退出Form B时,我想重新加载Form A的控件(列表、网格)

我尝试过很多项目

激活、停用、进入、离开、启用、可见性更改,但无法捕获任何, 如果我使用带有某个标志的“已激活/已停用”来检查哪一个已触发,则会发生“继续”循环。请一些机构提出可行的方法

以下是编辑代码:

Public Class Form1

Private Sub Form1_Activated(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Activated
    MessageBox.Show("Activated")
End Sub

Private Sub Form1_Deactivate(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Deactivate
    ' MessageBox.Show("Deactivated")
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Me.Text = "Activated/Deactivated"
    MessageBox.Show("This will set focus lost")
End Sub
末级 --如果单击一次按钮1\u单击“MessageBox.Show(“Activated”)”会反复出现。

请尝试以下操作:

[更新]

Public Class FormA

Friend WithEvents objectFormB As FormB

Private Sub objectFormB_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles objectFormB.FormClosed
    'do whatever...
End Sub
End Class

基本上,它是多个表单打开的,我所做的是,在最后一个表单的表单关闭时,我的代码返回到Forma A,我检查了打开的表单,从那里我选择了我的表单A并触发了重新加载列表的函数。

Ups,抱歉,我编辑了我的答案:Form1将是你的表单A,Form 2=Form B,因此您必须使用“Friend WithEvents”在表单a中声明Form B对象,并在表单a中添加事件objectForm a上有两个用户控件Form User Control_1我称之为Form B,所以我无法计算输出请发布您的代码以便我可以尝试帮助您。您想重新加载表单A的控件是什么意思?你不能在FormA_Activate中添加这样的代码吗?我添加了,但是一次又一次地激活呼叫,即使你点击一个按钮,Form_Activate也会在用户返回该表单时触发;我不会一次又一次地用一个没有代码的按钮来理解你所说的。你想在他们结束表格B的时候发生什么吗?使用公共财产。你的要求是错误的。当您单击当前焦点窗体上的按钮时,激活的事件不会触发。它仅在窗体上的一个控件丢失输入焦点后收到该焦点时激发。激活的事件就是您想要的事件。如果您仍然无法使其工作,请发布重新编程代码。@Cody Gray:我有这个场景,请告诉我如何避免循环,下面我已经上传了测试项目,请建议。。