this.Visible在Windows窗体中不起作用

Bar*_*run 19 c# visible winforms

我有个问题.我需要在窗口加载时隐藏窗口.但

    private void Form1_Load(object sender, EventArgs e)
    {
        this.Visible = false;
    }
Run Code Online (Sandbox Code Playgroud)

不管用.财产Visible仍然是真实的.我错过了什么吗?

Han*_*ant 36

是的,Visible属性在Windows窗体中是一个大问题,这实际上是创建句柄并导致OnLoad()运行.换句话说,窗口在可见之前不存在.并且它将忽略撤消此操作的尝试.

如果您使用NotifyIcon,仍然希望仍然创建句柄但不会使窗口可见是很常见的.您可以通过重写SetVisibleCore来实现此目的:

    protected override void SetVisibleCore(bool value) {
        if (!this.IsHandleCreated) {
            value = false;
            CreateHandle();
        }
        base.SetVisibleCore(value);
    }
Run Code Online (Sandbox Code Playgroud)

请注意,在窗口实际可见之前,OnLoad仍然无法运行,因此如有必要,请将代码移动到构造函数中.只需在NotifyIcon的上下文菜单事件处理程序中调用Show()即可使窗口可见.


mpe*_*son 5

看来你可以使用以下内容:

    private void Form1_Load(object sender, EventArgs e)
    {
        this.Opacity = 0;
        this.ShowInTaskbar = false;
    }
Run Code Online (Sandbox Code Playgroud)

我刚刚在winforms应用程序中对它进行了测试,但它确实有用.

(也刚刚发现:启动时单个表单隐藏