C# 如何在活动窗体下打开窗体

C# 如何在活动窗体下打开窗体,c#,.net,winforms,window,C#,.net,Winforms,Window,在.Net WinForms中,我有两种形式。Form1已打开并处于活动状态。我如何打开新表格(表格2): Form1必须有焦点 Form2在Form1下打开(后台Form1) 第一点很简单,请看 但我不知道如何在Form1下显示Form2。 谢谢 编辑 public partial class Form1 : Form { Form2 frm; public Form1() { InitializeComponent(); frm

在.Net WinForms中,我有两种形式。Form1已打开并处于活动状态。我如何打开新表格(表格2):

  • Form1必须有焦点
  • Form2在Form1下打开(后台Form1)
第一点很简单,请看 但我不知道如何在Form1下显示Form2。 谢谢

编辑

 public partial class Form1 : Form
{
    Form2 frm;

    public Form1()
    {
        InitializeComponent();
        frm = new Form2();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        textBox1.Focus();
        timer1.Start();
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        this.AddOwnedForm(frm);
        frm.Show();
        frm.SendToBack();
        this.BringToFront();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        frm.Show();
        frm.SendToBack();
        this.BringToFront();
    }

}
表格2


您只需实例化Form2并显示它,例如:

var form2 = new Form2();
form2.Visible = true;
然后将Form1设置为活动表单(假设这是在Form1的代码中完成的-因此是
this
):


我认为第二点你需要做的是:

var form2 = new Form2();
    form2.MdiParent = form1; //form1 is your parent form; use this operator in case you are creating this form from out base form

    form2.WindowState = FormWindowState.Normal;
    form2.Show();
有关更多详细信息,请参阅:

编辑

请参阅下面的代码,该代码显示frm在Form1顶部打开

public partial class Form1 : Form
{
    Form2 frm;

    public Form1()
    {
        InitializeComponent();
        frm = new Form2();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        this.WindowState = FormWindowState.Maximized;
        textBox1.Focus();
        timer1.Start();
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        if (!frm.Visible)
        {
          this.AddOwnedForm(frm);
          frm.Show();
          frm.SendToBack();
          this.BringToFront();
        }
    }

    private void button1_Click(object sender, EventArgs e)
    {
        this.AddOwnedForm(frm);
        frm.Show();
        frm.SendToBack();
        this.BringToFront();
    }

}

我猜想你想要一个对话

var form2 = new Form2(); 
form2.Visible = true; 
this.ShowDialog();

我试过了,但没用。在Form1中,我创建了Form2:Form2 frm=new Form2();frm.可见=真实;这个。布林托夫隆();我们只需使用
form2.SendToBack()但我不想创建MDI表单!将打开的表单不止一个,并且来自不同的代码位置。这是我想做的一个简短的例子。我认为为了在一个单亲表单下查看多个表单,您必须使用多文档界面。您可以将当前父窗体设置为具有MDIChild,如下所示:this.IsMdiContainer=true;然后将form2.MdiParent设置为此;否则,另一种方法是使用ShowDialog()。但是,ShowDialog将表单数量限制为2个。问题是我无法使用MDI,因为该应用程序是另一家公司的模块化应用程序,我为该应用程序制作了一个模块。因此,我的应用程序不是MDI,我无法使用此应用程序。请尝试此应用程序。var form2=新form2();本.新增表格(表格2);表2.Show();让我知道这是否适合你。您可以使用此命令删除表单。RemoveOwnedForm(form2);一旦form2关闭。不,仍然不工作。下面是一个简单的测试代码:你的意思是并排显示表单,然后你必须设置表单的大小和位置。不,我的意思是设置表单2的Z顺序。我仍然希望Form1位于顶部,但我不能将Form1设置为最顶部(因为Form1可以是应用程序中的另一个表单)。要点是:每个自动(以编程方式)打开的表单必须在活动表单(本例中为Form1)下打开,而不是在顶部。
public partial class Form1 : Form
{
    Form2 frm;

    public Form1()
    {
        InitializeComponent();
        frm = new Form2();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        this.WindowState = FormWindowState.Maximized;
        textBox1.Focus();
        timer1.Start();
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        if (!frm.Visible)
        {
          this.AddOwnedForm(frm);
          frm.Show();
          frm.SendToBack();
          this.BringToFront();
        }
    }

    private void button1_Click(object sender, EventArgs e)
    {
        this.AddOwnedForm(frm);
        frm.Show();
        frm.SendToBack();
        this.BringToFront();
    }

}
var form2 = new Form2(); 
form2.Visible = true; 
this.ShowDialog();