不能隐藏表单.窗体构造函数完成后出现窗口

本文关键字:窗口 隐藏 表单 窗体 构造函数 不能 | 更新日期: 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;