C#:显示一个不可见的形式

Cra*_*ton 13 c# forms

我在C#中有以下代码:

Form f = new MyForm();
f.Visible = false;
f.Show();
f.Close();
Run Code Online (Sandbox Code Playgroud)

尽管如此f.Visible = false,我看到表格的闪现然后消失了.我需要做些什么才能使这个表格不可见?

我需要在我的应用程序启动期间显示表单(隐形),因为这样做会在显示此表单时消除冷启动延迟.

SwD*_*n81 15

如果要在不实际看到表单的情况下显示表单,可以执行以下操作:

  public Form1()
  {
     InitializeComponent();
     this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
     this.ShowInTaskbar = false;
     this.Load += new EventHandler(Form1_Load);
  }

  void Form1_Load(object sender, EventArgs e)
  {
     this.Size = new Size(0, 0);
  }
Run Code Online (Sandbox Code Playgroud)

如果稍后你想要展示它,你可以改变一切.以下是10秒后的示例,它显示了以下形式:

  Timer tmr = new Timer();
  public Form1()
  {
     tmr.Interval = 10000;
     tmr.Tick += new EventHandler(tmr_Tick);
     tmr.Start();

     InitializeComponent();
     this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
     this.ShowInTaskbar = false;
     this.Load += new EventHandler(Form1_Load);
  }

  void tmr_Tick(object sender, EventArgs e)
  {
     this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Sizable;
     this.ShowInTaskbar = true;
     this.Size = new Size(300, 300);
  }

  void Form1_Load(object sender, EventArgs e)
  {
     this.Size = new Size(0, 0);
  }
Run Code Online (Sandbox Code Playgroud)

  • @Craig - 如果它有用,请随意投票.你甚至可以得到一个很酷的"支持者"徽章:p (2认同)
  • 我有一个问题,通过将大小设置为零,窗口在屏幕上是不可见的,但是当按下ALT + TAB时,它会在"任务切换"对话框中列出,尽管我已经设置了ShowInTaskbar = false!Kazar使用SetVisibleCore的技术更好,因为窗口到处都是完全消失的.(见下文) (2认同)

Han*_*ant 12

到目前为止,保持表单不可见的最简单方法就是不显示它.在Winforms中这是一个大问题,调用Show()或将Visible属性设置为true(同样的事情)会做很多事情.这是创建本机Windows窗口的方式.在典型的.NET'懒惰'时尚.任何将Visible设置为false的尝试(如在OnLoad中)都将被取消.

从技术上讲,您可以覆盖SetVisibleCore()方法.像这样:

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

这可确保在一次调用Show()时窗口不可见.例如,当您使用NotifyIcon时,这通常很方便,您通常希望图标直接位于通知区域中,并且仅在用户单击图标时显示一个窗口.请注意,OnLoad()在窗口实际可见之前不会运行,因此请将代码移动到构造函数或覆盖(如有必要).


She*_*Pro 9

简单因为f.Show()再次使形式可见并且f.Close()关闭它...所以闪光灯.

如果您看到Form.Show()方法的MSDN文档,它清楚地提到:

显示控件等效于将Visible属性设置为true.调用Show方法后,Visible属性返回值true,直到调用Hide方法.


如果您不想要闪光灯,则根本不显示表格.