Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用C最初隐藏主GUI窗口#_C#_.net_User Interface - Fatal编程技术网

C# 如何使用C最初隐藏主GUI窗口#

C# 如何使用C最初隐藏主GUI窗口#,c#,.net,user-interface,C#,.net,User Interface,我有一个用C#编写的GUI应用程序,它启动时必须隐藏在屏幕之外(相反,它会显示一个托盘图标)。在C++/MFC中,我会这样隐藏它: void OnWindowPosChanging(WINDOWPOS* lpwndpos) { CDialog::OnWindowPosChanging(lpwndpos); //Prevent dialog from showing lpwndpos->flags &= ~SWP_SHOWWINDOW; } 但是在C#?中

我有一个用C#编写的GUI应用程序,它启动时必须隐藏在屏幕之外(相反,它会显示一个托盘图标)。在C++/MFC中,我会这样隐藏它:

void OnWindowPosChanging(WINDOWPOS* lpwndpos)
{
    CDialog::OnWindowPosChanging(lpwndpos);

    //Prevent dialog from showing
    lpwndpos->flags &= ~SWP_SHOWWINDOW;
}

但是在C#?

中有更简单的方法吗?您可以使用启动窗体的and Visible属性。

您可以使用启动窗体的and Visible属性。

您需要将窗体的and属性设置为false,然后只需使用该类在任务栏区域显示图标即可

或者,如果这是应用程序将打开的第一个表单,则需要在
程序.cs
文件中编辑
应用程序.Run()

简单地替换

Application.Run(new MyForm());

然后在窗体的构造函数中初始化NotifyIcon对象

NotifyIcon nIcon = new NotifyIcon();
nIcon.Icon = new Icon(@"...");
nIcon.Visible = true;

您需要将表单的和属性设置为false,然后只需使用该类在托盘区域中显示一个图标

或者,如果这是应用程序将打开的第一个表单,则需要在
程序.cs
文件中编辑
应用程序.Run()

简单地替换

Application.Run(new MyForm());

然后在窗体的构造函数中初始化NotifyIcon对象

NotifyIcon nIcon = new NotifyIcon();
nIcon.Icon = new Icon(@"...");
nIcon.Visible = true;

我用它来隐藏一个控制台窗口(最终)

所有这些看起来都有点复杂,但基本上是先得到一个窗口的句柄,然后用它调用ShowWindow。由于它是一个控制台应用程序,我传入一个命令行参数以不隐藏窗口,用于调试等

我把它放在program.cs中,解码命令行参数,然后调用NativeMethods.SetConsoleWindowVisiblity


从未发现仅仅设置可见性和showintaskbar不起作用的原因。但他们肯定没有

我最终用它来隐藏控制台窗口

所有这些看起来都有点复杂,但基本上是先得到一个窗口的句柄,然后用它调用ShowWindow。由于它是一个控制台应用程序,我传入一个命令行参数以不隐藏窗口,用于调试等

我把它放在program.cs中,解码命令行参数,然后调用NativeMethods.SetConsoleWindowVisiblity


从未发现仅仅设置可见性和showintaskbar不起作用的原因。但是他们肯定没有

在Winforms中,您可以通过覆盖表单中的SetVisibleCore()方法来实现这一点。需要做一些额外的工作,本机窗口是以传统的.NET惰性方式创建的。触发器是第一个Show()调用。所以你仍然必须确保这是照顾。将此代码粘贴到表单中:

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

现在,您可以通过调用Show()或将visible属性设置为true,使其在任何时候都可见。请注意,加载事件在此之前不会触发,因此请确保将所有初始化代码移动到它所属的构造函数中。

在Winforms中,您可以通过覆盖表单中的SetVisibleCore()方法来执行此操作。需要做一些额外的工作,本机窗口是以传统的.NET惰性方式创建的。触发器是第一个Show()调用。所以你仍然必须确保这是照顾。将此代码粘贴到表单中:

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

现在,您可以通过调用Show()或将visible属性设置为true,使其在任何时候都可见。请注意,加载事件在此之前不会触发,因此请确保将所有初始化代码移动到它所属的构造函数中。

如果单独使用,此属性所做的只是防止/允许您的窗口显示在任务栏中。用于对话框。但不是为了阻止主窗口显示…如果单独使用,此属性所做的只是阻止/允许您的窗口显示在任务栏中。用于对话框。但不是为了阻止主窗口显示…我这样做:
public Form1(){this.ShowInTaskbar=false;this.Visible=false;}
但是窗口仍然显示。请使用表单加载事件。如果要使用构造函数,请将不透明度设置为0(如果要显示表单,请将不透明度设置为100),而不是将Visible属性设置为false.OK。它是有效的。。。有点我的窗户在被移走之前会闪烁一毫秒左右。这不太好…是用可见光还是不透明法?由于事件在窗体加载时触发,因此可能会显示可见的。不透明方法不应导致窗口在开始时闪烁,因为它将在窗体构造函数中执行。我还编辑了我的答案,以便为您提供不同的解决方案,以防这将是应用程序运行的第一个窗体。我这样做:
public Form1(){this.ShowInTaskbar=false;this.Visible=false;}
但窗口仍然显示。请使用表单加载事件。如果要使用构造函数,请将不透明度设置为0(如果要显示表单,请将不透明度设置为100),而不是将Visible属性设置为false.OK。它是有效的。。。有点我的窗户在被移走之前会闪烁一毫秒左右。这不太好…是用可见光还是不透明法?由于事件在窗体加载时触发,因此可能会显示可见的。不透明方法不应导致窗口在开始时闪烁,因为它将在窗体构造函数中执行。我还编辑了我的答案,以便为您提供不同的解决方案,以防这将是应用程序运行的第一个窗体。谢谢。我更喜欢这种方法。这正是我想要的。简单明了,谢谢。我更喜欢这种方法。这正是我想要的。简单明了。