代码之家  ›  专栏  ›  技术社区  ›  ygoe

Windows窗体控件如何知道窗体何时被(取消)激活?

  •  3
  • ygoe  · 技术社区  · 15 年前

    我在C.NET中有一个Windows窗体应用程序。它包含一个用户绘制的控件,该控件还处理键盘焦点。如果控件的某个部分具有焦点,则会在其周围绘制焦点突出显示边框。当包含控件的窗体被停用时,焦点边框必须从控件中消失,这一点很明显。但是控件甚至没有收到关于它的通知。它只在另一个控件聚焦时接收“离开”事件,而不是另一个窗口。控制者怎么知道?

    1 回复  |  直到 15 年前
        1
  •  3
  •   Henk Holterman    15 年前

    加载窗体+控件时,控件可以订阅窗体的激活和停用事件。

    如果它是一个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;
    }
    
    推荐文章