0

.Net WinFormsには、2つのフォームがあります。Form1は開いていてアクティブです。次のような新しいフォーム(Form2)を開くにはどうすればよいですか。

  • Form1には焦点が必要です
  • Form2はForm1の下で開かれます(背景Form1)

最初のポイントは単純です。stackoverflowを参照してください... しかし、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();
    }

}

Form2

public partial class Form2 : Form
{
    public Form2()
    {
        InitializeComponent();            
    }

    private void Form2_Load(object sender, EventArgs e)
    {
        textBox1.Focus();
    }

    protected override bool ShowWithoutActivation
    {
        get
        {
            return true;
        }
    }

    protected override CreateParams CreateParams
    {
        get
        {
            //make sure Top Most property on form is set to false
            //otherwise this doesn't work
            int WS_EX_TOPMOST = 0x00000008;
            CreateParams cp = base.CreateParams;
            cp.ExStyle |= WS_EX_TOPMOST;
            return cp;
        }
    }
4

3 に答える 3

2

私は2番目のポイントのためにあなたがする必要があることはこれだと思います:

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();

詳細については、こちらをご覧ください。

http://msdn.microsoft.com/en-us/library/system.windows.forms.form.mdiparent.aspx

編集

Form1の上でfrmが開いているように見える以下のコードを参照してください。

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

}
于 2012-10-03T05:03:26.877 に答える
0

Form2をインスタンス化して表示するだけです。例:

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

次に、Form1をアクティブなフォームに設定します(これがForm1のコードで行われると仮定すると、したがってthis):

this.BringToFront();
于 2012-10-03T04:47:40.463 に答える
0

私はあなたがダイアログが欲しいと思います

var form2 = new Form2(); 
form2.Visible = true; 
this.ShowDialog();
于 2012-10-03T05:47:37.797 に答える