0

私はこの単純な Windows フォーム アプリを Visual Studio の C# で作成しています。私は2つのフォームを持っています。form1には、テキストボックス、リストボックス、および2つのボタンがあります(1つはテキストボックスからリストボックスに挿入し、もう1つはform2を開くためのものです)。form2 にはテキストボックスしかありません。form1のボタン(form2を開くため)をクリックすると、form2が開き、テキストボックスが(formLoadで)form1のリストボックスから選択された項目を含むようになります。しかし、ボタンをクリックすると、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」と表示されます。私は何を間違っていますか?私はそれが単純なものだと確信していますが、私はそれを手に入れることができません。

前もって感謝します!

これが私のコードです:

form1:

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

    private void btnOpenForm2_Click(object sender, EventArgs e)
    {
        Form2 f2 = new Form2();
        f2.ShowDialog();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        listBox1.Items.Add(textBox1.Text);
    }
    public string Transfer
    {
        get { return listBox1.SelectedItem.ToString(); }
    }

そしてform2で:

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

    private void Form2_Load(object sender, EventArgs e)
    {
        Form1 f1 = new Form1();
        textBox1.Text = f1.Transfer;
    }
4

4 に答える 4

0

リストボックス項目を選択していないため、値 listBox1.SelectedItem は null です。try catch ブロックを実行する練習をしてください

于 2013-10-18T12:03:12.647 に答える
0

ここで新しいForm1インスタンスを作成しています。これは、開いていた Form1 インスタンスとは関係ありませんForm2

private void Form2_Load(object sender, EventArgs e)
{
    Form1 f1 = new Form1(); // here is new instance of Form1 created
    textBox1.Text = f1.Transfer;
}

したがって、この新しい Form1 インスタンスにはアイテムが選択されておらず、エラーが発生しています。Form2 を開くときに、選択したアイテムの値を Form2 に渡すことをお勧めします。

private void btnOpenForm2_Click(object sender, EventArgs e)
{
    Form2 f2 = new Form2(Transfer); // pass selected item value to constructor
    f2.ShowDialog();
}

必要なのはForm2、この文字列を受け入れるようにコンストラクターを変更することだけです。

public Form2(string transfer)
{
    InitializeComponent();
    textBox1.Text = transfer;
}
于 2013-10-18T13:20:06.973 に答える