0

アプリケーションには 2 つのフォームがあります。私のForm1には、いくつかの項目を持つリスト ビューがあります。行をダブルクリックすると、行の値を編集できるポップアップ ウィンドウが表示されます。これには doubleclick イベントを使用しました。ポップアップウィンドウのために、新しいフォームForm2を作成しました。Form2で選択した行の値にアクセスできるように、リストビューをForm1の内部として作成しました。form2 の読み込みでは、選択した行の値を取得してテキスト ボックスに表示していますが、これによりエラーが発生します。これは私のコードです:

   //this is in form1
   private void bufferedListView1_DoubleClick(object sender, EventArgs e)
    {
        form2 obj = new form2();
        obj.ShowDialog();
    }

   //in form2
   Form1 o = new Form1();
   private void form2_Load(object sender, EventArgs e)
    {
        txt_editname.Text = o.bufferedListView1.SelectedItems[0].SubItems[0].Text;
        txt_editno.Text = o.bufferedListView1.SelectedItems[0].SubItems[1].Text;
    }

私が得るエラーは次のとおりです。InvalidArgument=Value of '0' is not valid for 'index'. Parameter name: index

どこが間違っていますか?

4

3 に答える 3

1

form2 のコンストラクターで必要なデータを渡す

public form2(string text1, string text2)
{
   //work with values
}

呼び出しコードを次のように変更します。

private void bufferedListView1_DoubleClick(object sender, EventArgs e)
{
    form2 obj = new form2(bufferedListView1.SelectedItems[0].SubItems[0].Text,
       bufferedListView1.SelectedItems[0].SubItems[1].Text);
    obj.ShowDialog();
}
于 2012-08-05T06:31:10.797 に答える
0
Form1 o = Application.OpenForms["Form1"] as Form1;
private void form2_Load(object sender, EventArgs e)
{
    txt_editname.Text = o.bufferedListView1.SelectedItems[0].SubItems[0].Text;
    txt_editno.Text = o.bufferedListView1.SelectedItems[0].SubItems[1].Text;
}

新しいインスタンスではなく、既に作成されている Form1 のインスタンスを取得する必要があります。

于 2012-08-05T06:31:02.620 に答える
0

コードは次のようになります。

    //this is in form1
    private void bufferedListView1_DoubleClick(object sender, EventArgs e)
    {
        form2 obj = new form2
                        {
                            Name = o.bufferedListView1.SelectedItems[0].SubItems[0].Text,
                            No = o.bufferedListView1.SelectedItems[0].SubItems[1].Text,
                        };
        obj.ShowDialog();
    }

    //in form2
    public String Name;
    public String No;
    Form1 o = new Form1();
    private void form2_Load(object sender, EventArgs e)
    {
        txt_editname.Text = Name;
        txt_editno.Text = No;
    }
于 2012-08-05T07:42:26.503 に答える