在c#桌面应用开发中,隐藏窗口是较为常见的需求,不同的开发框架对应不同的实现方案,同时也可以通过系统API实现通用控制。下面分别介绍不同场景下的实现方法。

WinForms框架下隐藏窗口
WinForms是最早的c#桌面开发框架,隐藏窗口的操作非常直接,主要通过窗口的Visible属性或者Hide方法实现。
使用Visible属性
将窗口的Visible属性设置为false即可隐藏窗口,设置为true可以重新显示窗口。
using System;
using System.Windows.Forms;
namespace WinFormsHideWindowDemo
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
// 点击按钮隐藏当前窗口
private void btnHide_Click(object sender, EventArgs e)
{
// 设置可见性为false,隐藏窗口
this.Visible = false;
}
// 点击按钮显示当前窗口
private void btnShow_Click(object sender, EventArgs e)
{
// 设置可见性为true,显示窗口
this.Visible = true;
}
}
}
使用Hide方法
Hide方法是WinForms窗口自带的实例方法,调用后会直接将窗口隐藏,效果和设置Visible为false一致。
private void btnHideWindow_Click(object sender, EventArgs e)
{
// 调用Hide方法隐藏当前窗口
this.Hide();
}
private void btnShowWindow_Click(object sender, EventArgs e)
{
// 调用Show方法显示当前窗口
this.Show();
}
WPF框架下隐藏窗口
WPF的窗口模型和WinForms不同,隐藏窗口主要通过Visibility属性或者Hide方法实现。
使用Visibility属性
WPF窗口的Visibility属性有三个可选值:Visible表示显示,Hidden表示隐藏但保留窗口位置,Collapsed表示隐藏且不保留布局空间,隐藏窗口通常使用Hidden。
using System.Windows;
namespace WpfHideWindowDemo
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
// 点击按钮隐藏当前窗口
private void BtnHide_Click(object sender, RoutedEventArgs e)
{
// 设置Visibility为Hidden隐藏窗口
this.Visibility = Visibility.Hidden;
}
// 点击按钮显示当前窗口
private void BtnShow_Click(object sender, RoutedEventArgs e)
{
// 设置Visibility为Visible显示窗口
this.Visibility = Visibility.Visible;
}
}
}
使用Hide方法
WPF的Window类同样提供了Hide方法,调用后会直接隐藏窗口,内部也是修改Visibility属性实现。
private void HideWindowBtn_Click(object sender, RoutedEventArgs e)
{
// 调用Hide方法隐藏窗口
this.Hide();
}
private void ShowWindowBtn_Click(object sender, RoutedEventArgs e)
{
// 调用Show方法显示窗口
this.Show();
}
使用Windows API隐藏窗口
如果需要更灵活地控制窗口状态,比如隐藏其他进程的窗口,或者控制窗口的最小化、最大化、隐藏等状态,可以借助Windows的ShowWindow API实现。
首先需要引入user32.dll中的ShowWindow函数和FindWindow函数(如果需要查找其他窗口)。
using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace ApiHideWindowDemo
{
public partial class MainForm : Form
{
// 引入ShowWindow API,nCmdShow参数控制窗口显示状态
[DllImport("user32.dll", EntryPoint = "ShowWindow")]
private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
// 引入FindWindow API,用于查找指定类名和窗口名的窗口句柄
[DllImport("user32.dll", EntryPoint = "FindWindow")]
private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
// 窗口显示状态常量:0表示隐藏窗口,1表示正常显示窗口
private const int SW_HIDE = 0;
private const int SW_SHOW = 1;
public MainForm()
{
InitializeComponent();
}
// 隐藏当前窗口
private void btnHideCurrent_Click(object sender, EventArgs e)
{
// 传入当前窗口的句柄和隐藏常量
ShowWindow(this.Handle, SW_HIDE);
}
// 显示当前窗口
private void btnShowCurrent_Click(object sender, EventArgs e)
{
// 传入当前窗口的句柄和显示常量
ShowWindow(this.Handle, SW_SHOW);
}
// 隐藏指定标题的其他窗口(示例:隐藏名为记事本的窗口)
private void btnHideOtherWindow_Click(object sender, EventArgs e)
{
// 查找标题为记事本的窗口句柄,类名可以为null
IntPtr otherWindowHandle = FindWindow(null, "记事本");
if (otherWindowHandle != IntPtr.Zero)
{
// 隐藏找到的窗口
ShowWindow(otherWindowHandle, SW_HIDE);
}
else
{
MessageBox.Show("未找到目标窗口");
}
}
}
}
不同方法对比
不同隐藏窗口的方法适用场景不同,以下是简单的对比说明:
| 实现方式 | 适用框架 | 特点 |
|---|---|---|
| Visible属性/Hide方法 | WinForms | 操作简单,仅能控制当前应用内的窗口 |
| Visibility属性/Hide方法 | WPF | 符合WPF属性模型,可控制窗口显示模式 |
| ShowWindow API | 所有c#桌面框架 | 功能强大,可控制其他进程的窗口 |
注意事项
- 隐藏窗口后,窗口仍然在内存中存在,不会触发窗口的关闭事件,仅不显示在屏幕上。
- 使用API隐藏其他进程窗口时,需要确保目标窗口存在,否则调用会无效。
- WPF中如果使用
Collapsed作为Visibility的值,窗口隐藏后不会保留原来的布局位置,可能影响界面布局。
C#WinFormsWPF窗口隐藏ShowWindow修改时间:2026-06-20 15:00:26