C#在开始时隐藏新表格

时间:2009-12-23 13:00:58

标签: c# winforms

我有一个隐藏的表单,这会加载一个子表单,2e表单应该隐藏起来

请注意:我最不使用

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

6 个答案:

答案 0 :(得分:5)

我真的不明白为什么你能够让它在一个而不是另一个工作。在调用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);
}

答案 1 :(得分:3)

未来的googlers / searchers ......

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

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

答案 2 :(得分:1)

可能是我不明白这个问题

但是 如果您有任何表格,可以使用formobject.Visiable = false

隐藏它
Form m = new Form();
m.Visible = false;

答案 3 :(得分:1)

如果你使用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);
        }
    }

答案 4 :(得分:1)

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;
    }

答案 5 :(得分:0)

    public NewForm()
    {
        InitializeComponent();


        SetVisibleCore(false);


    }

    private bool setCore = false;

    protected override void SetVisibleCore(bool value)
    {
        base.SetVisibleCore(setCore ? value : setCore);
    }

可能会有所帮助