0

これは同じ問題に対する私の2番目の質問ですが、この例をより簡単にして、あなたの答えをよりよく理解できるようにしました.

「メソッド 'form2' のオーバーロードは '0' 引数を取らない」というメッセージが表示されます

form1 のボタンは form2 に移動し、テキスト ボックスの値も取得します。Form2 はテキストボックスの値をラベルに表示します。次に、フォーム 2 にフォーム 1 に戻る戻るボタンがあります。

以下のコードを 2 回目に使用すると、エラーが発生します。

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

この例のすべてのコードは次のとおりです。

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

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 frm2 = new Form2(textBox1.Text);
        frm2.Show();
        this.Hide();
    }
}

public partial class Form2 : Form
{
    public string txtbox;

    public Form2(string txtbox)
    {
        InitializeComponent();
        this.txtbox = txtbox;
    }
    private void Form2_Load(object sender, EventArgs e)
    {
        label1.Text = txtbox;
    }
    private void button1_Click(object sender, EventArgs e)
    {
        Form2 frm2 = new Form2();
        frm2.Show();
        this.Hide();
    }
}

誰かがこれを説明して、これを正しくする方法を教えてください。まだまだ初心者なので詳しく教えてください。

4

6 に答える 6

1

すべての回答で、エラーが発生する理由と対処方法が説明されていますが、本当に必要なのはForm2からForm1を開くことだと思います(質問で説明したように)。

Form2 button1_Clickが「戻る」ボタンだと思います。

したがって、Form2の button1_Click で、次のように変更します。

Form2 frm2 = new Form2();
frm2.Show();

に:

Form1 frm = new Form1();
frm.Show();

結果:

public partial class Form2 : Form
{
    /* ... */

    private void button1_Click(object sender, EventArgs e)
    {
        Form1 frm = new Form1();
        frm.Show();
        this.Hide();
    }
}

ただし、これをさらに改善するには、おそらくForm2をダイアログとして開き、 Form1に結果を処理させて、毎回新しい Form1 を作成する代わりにForm1を再利用できるようにする必要があります。

このようなもの:

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

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 frm2 = new Form2(textBox1.Text);

        // Hide Form1 before opening Form2.
        this.Hide();

        var dialogResult = frm2.ShowDialog(); // This method will freeze until you close Form2.

        // Then we show this form again. You can check the dialogResult if you want some logic.
        this.Show();
    }
}

public partial class Form2 : Form
{
    public string txtbox;

    public Form2(string txtbox)
    {
        InitializeComponent();
        this.txtbox = txtbox;
    }
    private void Form2_Load(object sender, EventArgs e)
    {
        label1.Text = txtbox;
    }
    private void button1_Click(object sender, EventArgs e)
    {
        this.DialogResult = DialogResult.OK; // Not necessary, but good if you want to have some logic.

        // Close this form (Form2) and returns to the Form1 button1_Click.
        this.Close();
    }
}
于 2012-12-13T12:10:13.440 に答える