C#在开始时隐藏新表单

我有一个隐藏的forms,这将加载一个子forms,2eforms也应该被隐藏

请注意:我最不习惯

ShowInTaskbar = false; // should be hidden too 

如果我使用(隐藏/可见),我最能够在表单之间进行通信,直到它的visible = true;

  this.SetParameterValueCallback += new SetParameterValueDelegate(ShowMain.SetParamValueCallbackFn); ShowMain.AddItemCallback = new AddItemDelegate(this.AddItemCallbackFn); //Showsub.Show(); Showsub.Hide(); // not working 

到目前为止我已经尝试过

 this.Visible = false; // didnt work BeginInvoke(new MethodInvoker(delegate { Hide(); })); // didnt work base.SetVisibleCore(false); // didnt work, Im not able communicate between form 

我真的不明白为什么你能够让它在一个而不是另一个工作。 在调用Show()方法时防止表单变得可见需要重写SetVisibleCore方法。 也许你可以利用这段代码:

 private bool mAllowVisible = false; public bool ReallyVisible { get { return mAllowVisible; } set { mAllowVisible = value; if (value) this.Visible = true; } } protected override void SetVisibleCore(bool value) { if (value && !IsHandleCreated) CreateHandle(); // Ensure Load event runs if (!ReallyVisible) value = false; base.SetVisibleCore(value); } 

对于未来的googlers / searchers …

有时您希望表单不可见,但是要让它认为它是可见的(例如,ReportViever控件不会呈现任何内容,如果表单将被所选答案中的方法设置为不可见),或者您希望显示第二个程序中的表单从另一个线程开始,不想通过闪烁第一个表单标题来惹恼用户…

如果是这样,你可以在form_Load事件上设置Opacity = 0并且它会做的事情。 从Windows 2000中可以了解这种神奇的Windows行为,并且在某些情况下非常有用。

如果你使用frm2.Hide();这就是我在表单上的表现。 它可能会做trix

  private void button1_Click(object sender, EventArgs e) { try { main_normal frm2 = new main_normal(); this.Hide(); //Hides Form1 frm2.ShowDialog(); //Displays main_normal this.ShowDialog(); //After the main_normal is closed, again displays Form1 } catch (Exception ex) { //this.Show(); MessageBox.Show(ex.Message, "wub wub Noe feilet men eg vet isje ka", MessageBoxButtons.OK, MessageBoxIcon.Error); } } 

可能是我不明白这个问题

但是,如果您有任何表单,可以使用formobject.Visiable = false隐藏它

 Form m = new Form(); m.Visible = false; 

Hans Passant代码的另一个版本是在初始隐藏发生时立即翻转开关:

  private bool _hasHiddenInitially = false; protected override void SetVisibleCore(bool value) { if (value && !IsHandleCreated) CreateHandle(); // Ensure Load event runs if (!_hasHiddenInitially) value = false; base.SetVisibleCore(value); _hasHiddenInitially = true; } 
  public NewForm() { InitializeComponent(); SetVisibleCore(false); } private bool setCore = false; protected override void SetVisibleCore(bool value) { base.SetVisibleCore(setCore ? value : setCore); } 

可能这会有所帮助