C# 当窗体被聚焦时发生的事件
我有两种形式,第一种是frmBase,第二种是frmBalloon。我改变了两种形式的焦点,第一种是显示frmBase,然后显示frmBalloon(frmBase不可见),然后再次显示frmBase。现在我需要先加载frmBase,然后在frmBalloon变得不可见后再显示事件 所以我需要的是当形式变得集中时发生的事件……你在追求什么 我之所以建议这样做而不是C# 当窗体被聚焦时发生的事件,c#,.net,winforms,C#,.net,Winforms,我有两种形式,第一种是frmBase,第二种是frmBalloon。我改变了两种形式的焦点,第一种是显示frmBase,然后显示frmBalloon(frmBase不可见),然后再次显示frmBase。现在我需要先加载frmBase,然后在frmBalloon变得不可见后再显示事件 所以我需要的是当形式变得集中时发生的事件……你在追求什么 我之所以建议这样做而不是GotFocus,是因为如果焦点从一个窗体更改为另一个窗体上的控件,则窗体本身不会获得焦点。以下是一个示例应用程序: using Sy
GotFocus
,是因为如果焦点从一个窗体更改为另一个窗体上的控件,则窗体本身不会获得焦点。以下是一个示例应用程序:
using System;
using System.Drawing;
using System.Windows.Forms;
class Test
{
static void Main()
{
TextBox tb = new TextBox();
Button button = new Button
{
Location = new Point(0, 30),
Text = "New form"
};
button.Click += (sender, args) =>
{
string name = tb.Text;
Form f = new Form();
f.Controls.Add(new Label { Text = name });
f.Activated += (s, a) => Console.WriteLine("Activated: " + name);
f.GotFocus += (s, a) => Console.WriteLine("GotFocus: " + name);
f.Show();
f.Controls.Add(new TextBox { Location = new Point(0, 30) });
};
Form master = new Form { Controls = { tb, button } };
Application.Run(master);
}
}
(将其构建为一个控制台应用程序-这就是输出的方向。)
在文本框中输入一些名称并单击“新建表单”-然后再次执行。现在,在新表单的文本框之间单击-您将看到激活的事件被触发,但没有GotFocus有一个事件。如何
请注意,控件上的GotFocus事件(表单从中派生,因此在此应用)标记为,将值false传递给,因此它在属性窗口中不可见
您应该在设计器生成的代码之外的代码中手动添加事件处理程序。五年前我不知道,但现在:
Enter
事件起作用。不,它对我的不起作用,因为我想要一个只在聚焦时发生的事件。什么时候激活它而不聚焦?嗨,Jon。我很好奇,每次你在表单上做任何事情时,激活的事件都会被触发吗?如果我的表单已获得焦点,并且我多次单击它,是否每次单击都会触发激活事件?@Chibbles:您必须进行测试以确保,但我相信只有当它以前未处于活动状态时才会触发激活事件。激活
仅当表单获得焦点一次时才会触发,而不是当您在表单上执行任何操作时,刚刚测试过。它在属性窗口的事件列表中吗?是的,它适用于表单。它应该在事件列表中,但您始终可以直接对其进行编码:myForm.GotFocus+=event\u handler代码>是否在属性窗口的事件列表中??是否使用每个窗体上打开另一个窗体的按钮逐个切换这两个窗体?如果每次都使用ShowDialog()打开/显示窗体,则可以使用窗体加载事件。您如何在表单之间切换?