0

Form1にあるcomboBox1を使用し、フォーム2でボタンをクリックした後にMessageBoxに表示したい.Form2で使用した:

    MessageBox.Show(Form.comboBox1.SelectedItem.ToString());

保護レベルが原因で、comboBox1 にアクセスできないというエラーが表示されます。公開する方法はありますか?また、ComboBox1.SelectedItem.ToString() を Form1 の文字列変数に割り当てて、Form2 の MessageBox で使用しようとしましたが、どちらも機能していないようでした。これを機能させる他の方法はありますか?

これが私のコードの残りの部分です:

    public Form1()
    {
        InitializeComponent();

        for (int i = 1; i <= 30; i++)
        {
            string[] numbers= { i.ToString() };
            comboBox1.Items.AddRange(numbers);
        }

    }

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

フォーム2:

    public Form2()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Form1 Form = new Form1();
        MessageBox.Show(Form.comboBox1.SelectedItem.ToString()); //Here is my error
    }
}

}

4

3 に答える 3

0

次のように、ComboBox をフォームのプロパティにすることができます。

public partial class Form1 : Form
{
    public ComboBox Combo1 { get { return this.comboBox1; } }
   ...
}

そしてそれはうまくいくでしょう。ただし、コードを少し調整する必要があります。1) フォームを表示し、2) ComboBox はすぐに何も選択されないため、別の例外が発生するため、選択を強制できます。すべてのコードは次のようになります。

private void button1_Click(object sender, EventArgs e)
{

    Form1 Form = new Form1();
    Form.Show();
    Form.Combo1.SelectedIndex = 0;
    MessageBox.Show(Form.Combo1.SelectedItem.ToString()); //Here is my error
}
于 2013-08-18T00:08:42.550 に答える
0

1 つの方法は、次のようにすることです。

内部では、この newForm1のようにインスタンス化します。つまり、それ自体を渡しているため、 inの任意のパブリック変数/プロパティを使用できるはずです。Form2Form2(this)Form1Form1Form2

より望ましい方法は、でアクセスできる場所からselecteditemForm1を someに格納することです。global scopeForm2

于 2013-08-17T23:56:20.273 に答える
0

簡単な答え: デザイナーでは、すべてのコントロールに と呼ばれるプロパティがあり、 、 などModifiersの場合に設定します。変更するだけで、フォームの外に表示されるようになります。privatepublic

ここで、Form2 のコードでは、最初に Form2 を作成した以前のインスタンスにアクセスするだけでなく、新しいForm1 を作成しています。これにより、ユーザーに 2 番目の Form1 が表示されますが、これはあなたがやりたかったことではないと思います。これを回避する最も単純な方法は、Form2 を作成した Form1 を保持するパブリック プロパティを Form2 に提供し、それを使用してコンボにアクセスすることです。

public partial class Form2 : Form
{
    public Form1 ParentForm {get; set;}

    public Form2()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        MessageBox.Show(this.ParentForm.comboBox1.SelectedItem.ToString());
    }
}

Form1 の場合:

private void button1_Click(object sender, EventArgs e)
{
    Form2 form = new Form2();
    form.ParentForm = this;
    form.Show();
}
于 2013-08-18T01:36:26.893 に答える