web-dev-qa-db-ja.com

別のフォームから新しいフォームを開く方法

ShowDialogメソッドを使用して開くフォームがあります。このフォームには、Moreというボタンがあります。 [もっと見る]をクリックすると、別のフォームが開き、現在のフォームが閉じます。

more ButtonのClickイベントハンドラーで次のコードを記述しました

MoreActions objUI = new MoreActions (); 
objUI.ShowDialog();
this.Close();

しかし、起こっているのは、最初のフォームを閉じているわけではありません。だから、私はこのコードを

MoreActions objUI = new MoreActions (); 
objUI.Show();
this.Close();

ここで、2番目のフォームが表示され、数秒以内に両方のフォームが閉じられます。

誰でも私が問題を解決するのを助けてくれますか?私がする必要があるのは、[その他のボタン]をクリックすると、別のフォームを開いて最初のフォームを閉じることです。

どんな種類の助けも私にとって本当に役立つでしょう。

46
Dinesh

私の意見では、メインフォームは両方の子フォームを開く責任があります。ここに、私が何をするかを説明するいくつかの擬似があります:

// MainForm
private ChildForm childForm;
private MoreForm moreForm;

ButtonThatOpenTheFirstChildForm_Click()
{
    childForm = CreateTheChildForm();
    childForm.MoreClick += More_Click;
    childForm.Show();
}

More_Click()
{
    childForm.Close();
    moreForm = new MoreForm();
    moreForm.Show();
}

最初の子で単純なイベントMoreClickを作成する必要があります。このアプローチの主な利点は、必要に応じて複製できることと、ある種の基本的なワークフローを非常に簡単にモデル化できることです。

51
Johann Blais

あなたが正しかったなら、あなたはこのようにしようとしていますか?

alt text

これに?
alt text

Form1で、ボタンにこのイベントを追加します。

    // button event in your Form1
    private void button1_Click(object sender, EventArgs e)
    {
        Form2 f2 = new Form2();
        f2.ShowDialog(); // Shows Form2
    }

次に、Form2でボタンに次のイベントも追加します。

    // button event in your Form2
    private void button1_Click(object sender, EventArgs e)
    {
        Form3 f3 = new Form3(); // Instantiate a Form3 object.
        f3.Show(); // Show Form3 and
        this.Close(); // closes the Form2 instance.
    }
36
yonan2236

わかりましたので、私はこれを使用しました:

public partial class Form1 : Form
{
    private void Button_Click(object sender, EventArgs e)
    {
        Form2 myForm = new Form2();
        this.Hide();
        myForm.ShowDialog();
        this.Close();
    }
}

これは正常に機能しているようですが、最初のフォームは非表示になっているだけで、イベントを生成できます。最初のフォームを閉じるには「this.Close()」が必要ですが、フォームを実行したい場合(ランチャーのように振る舞わない場合)は、次のように置き換える必要があります。

this.Show();

幸運を祈ります!

13
user2584967

最初のダイアログを閉じてさらにボタンを押すと設定される値を使用し、元のフォームで値をテストしてから、そこにダイアログを表示します。

元の

  1. 3つのウィンドウを作成
  2. Form1 Form2 Form3
  3. Form1に1つのボタンを追加します
  4. Form2に2つのボタンを追加します

フォーム1コード

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

    private bool DrawText = false;

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 f2 = new Form2();
        f2.ShowDialog();
        if (f2.ShowMoreActions)
        {
            Form3 f3 = new Form3();
            f3.ShowDialog();
        }

    }

Form2コード

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

        public bool ShowMoreActions = false;
        private void button1_Click(object sender, EventArgs e)
        {
            ShowMoreActions = true;
            this.Close();
        }


        private void button2_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }

Form3はそのままにします

6
rerun

これを試して..

//button1 will be clicked to open a new form
private void button1_Click(object sender, EventArgs e)
{
    this.Visible = false;     // this = is the current form
    SignUp s = new SignUp();  //SignUp is the name of  my other form
    s.Visible = true;
}
3
fmp

あなたはこの例を検討するかもしれません

//Form1 Window
//EventHandler
Form1 frm2 = new Form1();
{
    frm2.Show(this); //this will show Form2
    frm1.Hide();  //this Form will hide
}
1
Ramgy Borja

たとえば、Button1という名前のButtonがあります。最初にクリックすると、Button2EventHandlerが開き、別のFormを呼び出して、次のコードをボタンに書き込む必要があります。

your name example=form2.

form2 obj=new form2();

obj.show();

Form1を閉じるには、次のコードを記述します。

form1.visible=false;またはform1.Hide();

Boolを追加して、ボタンがいつアクティブになったかをアルゴリズムが認識できるようにすることができます。クリックされると、boolはtrueをチェックし、新しいフォームが表示され、最後のフォームが閉じられます。

フォームはラムを消費する(少なくとも少し)ことを知っておくことが重要です。そのため、使用しないものを非表示にするのではなく、閉じることをお勧めします。大きなプロジェクトに違いをもたらします。

0
Rafael