web-dev-qa-db-ja.com

フォーム間を移動するにはどうすればよいですか

私はC#とウィンドウフォームの初心者です私はプロジェクトをやっていて、いくつかの問題に遭遇します

  1. ウィンドウ内のフォームをナビゲートするにはどうすればよいですか(メニューストリップがあり、クリックすると「ブランド」という項目が表示されるので、クリックするとウィンドウ内で開くはずです。mdiparent/を使用して何かをしたくないです。コンテナ、form1とform2があり、form1にメニューストリップを配置します。form1の中に何かがあります。mdiparent/ containerを使用すると、form1のコンテンツ/ thingがform2をブロックします)

2.以下のコードを使用しますが、問題は、メニューストリップの[ブランド]をクリックしたform1を閉じたいということです...しかしどうやって???

public partial class Form1 : Form
{
    //  i put the menu strip in form1 design
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
    }

    private void Check_Click(object sender, EventArgs e)
    {
        Form2 Check = new Form2();
        Check.Show();
    }
}
10
cutexxxbabies

_Form1_はメインフォームであるため、単に閉じることはできませんが、非表示にすることはできます。 this.Hide()を使用します。

_private void Check_Click(object sender, EventArgs e)
{
    Form2 Check= new Form2();
    Check.Show();
    Hide();
}
_

[編集]

これが求められているものかどうかわからない。だが...

フォーム間のナビゲーションを実装するには、次のような多くの方法があります。

_Form1_:

_private void button1_Click(object sender, EventArgs e)
{
    Form2 form2 = new Form2();
    form2.Tag = this;
    form2.Show(this);
    Hide();
}
_

_Form2_:

_private void button1_Click(object sender, EventArgs e)
{
    var form1 = (Form1)Tag;
    form1.Show();
    Close();
}
_
21
Alex Aza

異なるフォームではなく、ユーザーコントロールを作成する必要があると思います。次に、メニューの選択に従って、メインパネルにユーザーコントロールを追加できます。

最初は以下のようなもの

this.panel.Controls.Clear();
this.panel.Controls.Add(new UserControl_For_Form1());

ユーザーがメニューの他の選択をクリックしたら。

this.panel.Controls.Clear();
this.panel.Controls.Add(new UserControl_For_Form2());

あなたが本当にあなたが現在使っている方法を使いたいならば。以下のコードが役立ちます。

Form2のForm1プロパティを追加し、コンストラクターを使用してform1インスタンスをForm2に解析します。

public partial class Form2 : Form
    {
        private Form1 form1;

        public Form2(Form1 myForm)
        {
            InitializeComponent();
            form1 = myForm;
        }
    }

Form2を表示し、form1を非表示にします。

private void Check_Click(object sender, EventArgs e)
{
    Form2 Check= new Form2(this);
    Check.Show();
    Hide();
}

Form2終了イベントで、form2にあるform1インスタンスを表示し、form2を閉じることができるようになりました。

MDIフォーム の使用はあなたのためのもう一つのオプションです。

4
CharithJ

この質問が出されてから7年が経ちましたが、誰かがまだ解決策を探している場合に備えて答えたいと思います。 DevExpressを使用している場合は、プログラムにナビゲーションフレームを追加できます。 GridControl、GroupBoxなどのさまざまなコンポーネントを切り替えることができます。したがって、フォーム間を移動するために追加のフォームを作成する必要はありません。

0
Caner Özdemir