不能隐藏表单.窗体构造函数完成后出现窗口
本文关键字:窗口 隐藏 表单 窗体 构造函数 不能 | 更新日期: 2023-09-27 18:08:09
我需要一个隐藏的表单,显示控制台作为用户界面(不要问为什么,我不需要其他方式)。所有的方法都在form类中。
因此,我创建了带有控制台输出的Windows窗体项目。一切正常,但我不能隐藏形式。
开始形式:
static void Main() {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
这里是form构造函数:
public Form1() {
InitializeComponent();
this.Visible = false;
//here i try to find one other window by caption
//using FindWindow() WinAPI method
this.Text = "Generated window title";
//find handle of this window:
int currentWindowHandle = (int)FindWindow(null, title);
//after this moment form is again visible
}
隐藏表单,我使用下面的代码:
protected override void SetVisibleCore(bool value) {
if (!this.IsHandleCreated) {
value = false;
CreateHandle();
}
base.SetVisibleCore(value);
}
表单开始隐藏,但在构造函数完成后,它再次可见。
我试图弄清楚它到底是在什么时候发生的:
protected override void WndProc(ref Message m) {
Debug.WriteLine(m.Msg);
base.WndProc(ref m);
}
我得到了这样的输出:
//waited a while
...
24 x0018 = SHOWWINDOW
528 x0210 = PARENTNOTIFY
14 x000E = GETTEXTLENGTH
13 x000D = GETTEXT
70 x0046 = WINDOWPOSCHANGING
在此之前,我已经收到多次消息13,14,70。当我得到最后70条消息后,base.WndProc(ref m);
窗口出现。
搜索消息解释:
SHOWWINDOW = 0x0018
当窗口即将被隐藏或显示时,WM_SHOWWINDOW消息被发送到窗口。
PARENTNOTIFY = 0x0210
WM_PARENTNOTIFY消息被发送给子窗口的父窗口,当子窗口被创建或销毁时,或者当用户点击鼠标按钮时,而光标在子窗口上。当子窗口被创建时,系统在创建窗口的CreateWindow或createwindowwex函数返回之前发送WM_PARENTNOTIFY。当子窗口被销毁时,系统在任何销毁窗口的处理发生之前发送消息。
肯定,有些事情不让我保持这个窗口隐藏?我不明白。我不向这个应用程序发送任何消息。我只是运行它看看
您可以直接使用this.Hide()
public Form1() {
InitializeComponent();
this.Hide();
}
试试这个也许能帮你解决问题
Form1 frm = new Form1;
frm.Hide();
或
frm.visible = false;
经过这一切,我找到了另一个解决方案。
也许这对社区是无用的。但有人会遇到同样的问题,所以我会张贴它。如果这个问题得到-5,我将删除它。
你可以直接:
this.WindowState = FormWindowState.Minimized;
this.ShowInTaskbar = false;
想知道,为什么它有时不工作:
this.Visible = false;