You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WinForms中是否存在类似WPF的Application.Activate()功能实现方式?

在WinForms中实现类似WPF的激活/失活功能

当然有啦!在WinForms里,你完全可以实现和WPF中Activated/Deactivated事件对应的功能,核心思路和WPF一致——监听应用程序或窗体的激活状态变化,只是具体的API和实现方式略有不同。

应用程序级的激活/失活监听

如果你想监听整个WinForms应用程序的激活状态(就像WPF里App级别的事件那样),可以使用Application类提供的两个事件:

  • Application.ApplicationActivated:当应用程序获得焦点、被激活时触发
  • Application.ApplicationDeactivated:当应用程序失去焦点、变为失活状态时触发

你只需要在程序入口(通常是Program.cs)里注册这些事件即可,示例代码如下:

using System;
using System.Windows.Forms;

namespace WinFormsActivateDemo
{
    static class Program
    {
        [STAThread]
        static void Main()
        {
            // 注册应用程序级激活事件
            Application.ApplicationActivated += OnAppActivated;
            // 注册应用程序级失活事件
            Application.ApplicationDeactivated += OnAppDeactivated;

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new MainForm());
        }

        private static void OnAppDeactivated(object sender, EventArgs e)
        {
            // 这里编写应用程序失活时的逻辑
            Console.WriteLine("WinForms应用程序已失去焦点");
        }

        private static void OnAppActivated(object sender, EventArgs e)
        {
            // 这里编写应用程序激活时的逻辑
            Console.WriteLine("WinForms应用程序已被激活");
        }
    }
}

单个窗体的激活/失活监听

如果只需要监听某个特定窗体的激活状态,那么可以直接使用窗体自身的Activated和Deactivate事件,示例如下:

public partial class MainForm : Form
{
    public MainForm()
    {
        InitializeComponent();
        // 注册窗体激活事件
        this.Activated += OnFormActivated;
        // 注册窗体失活事件
        this.Deactivate += OnFormDeactivated;
    }

    private void OnFormDeactivated(object sender, EventArgs e)
    {
        // 当前窗体失活时执行的逻辑
        MessageBox.Show("当前窗体已失活");
    }

    private void OnFormActivated(object sender, EventArgs e)
    {
        // 当前窗体激活时执行的逻辑
        MessageBox.Show("当前窗体已被激活");
    }
}

和WPF实现的对比

你提到的WPF是在App.xaml中通过声明式的方式绑定Activated和Deactivated事件,而WinForms则是通过代码注册事件的方式实现,两者的核心逻辑完全一致——都是监听应用或窗体的激活状态变化,从而执行对应的业务逻辑。

内容的提问来源于stack exchange,提问作者Ramzi Khahil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 02:22:27