Windows窗体控件如何知道其窗体被(de)激活的时间?

时间:2010-03-03 13:16:55

标签: c# forms controls focus

我在C#.NET中有一个Windows窗体应用程序。它包含一个用户绘制的控件,它也可以处理键盘焦点。如果控件的一部分具有焦点,则会在其周围绘制焦点高光边框。当取消激活包含控件的窗体时,焦点边框必须从控件中消失。但控制甚至没有得到关于它的通知。它仅在关注另一个控件而不是另一个窗口时接收“离开”事件。控制怎么知道呢?

1 个答案:

答案 0 :(得分:3)

加载Form + Control后,Control可以订阅Form的Activate和DeActivated事件。

如果是UserControl,则可以使用Control.Load事件执行此操作。对于CustomControl,我必须查找它。

无论如何,请务必在您的控件中实现Dispose以取消订阅事件。

试一试:

private void UserControl1_FormActivate(object sender, EventArgs e)
{
    label1.Text = "Acitve";
}

private void UserControl1_FormDeActivate(object sender, EventArgs e)
{
    label1.Text = "InAcitve";
}

private void UserControl1_Load(object sender, EventArgs e)
{
    this.ParentForm.Activated += UserControl1_FormActivate;
    this.ParentForm.Deactivate += UserControl1_FormDeActivate;
}