0
votes

I have two forms in my application. In my Form1 I have a list view having some items. When I double click on a row, I should get a pop-up window allowing me edit the row values. For this I used doubleclick event. Now for the pop-up window I created new form- Form2. I have made the listview as internal in Form1, so as to access the selected rows values in my form2. In form2 load I am retrieving the values of selected row to display in textboxes but this gives me error. This is my code:

   //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;
    }

The error that I get is: InvalidArgument=Value of '0' is not valid for 'index'. Parameter name: index

Where am I wrong?

3
oh why is that so? Am I not just creating an object for form1? - Cdeez

3 Answers

1
votes

Pass needed data in constructor of form2

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

And change calling code to this:

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();
}
0
votes
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;
}

you should retrieve the instance of Form1 which is already created, not a new instance.

0
votes

Your code should be like this:

    //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;
    }