0

リスト ビューからアイテムを選択しようとしていますが、選択するとそれぞれがテキスト ボックスに表示されます。最初のアイテムを選択して取得することはできますが、2 番目のアイテムを選択するとエラーが発生します。

「範囲外の引数は処理されませんでした。InvalidArgument='0' の値は 'index' には無効です。」

以下のコードがあります。助けてください..

public partial class Form2 : Form
{
  List<Person> people = new List<Person>();
}

class Person
{
  public string Name{ get; set; }

  private void button2_Click(Object sender, EventArgs e)
  {
    Person p = new Person();
    p.Name = textBox1.Text;
    people.Add(p);
    listBox1.Items.Add(p.Name);
  }

  private void listView1_SelectedIndexChanged(object sender, EventArgs e)
  {
    textBox1.Text = people[listView1.SelectedItems[0].Index].Name;
  }
}
4

4 に答える 4

1
 private void listView1_SelectedIndexChanged(object sender, EventArgs e)
 {
   if(listView1.SelectedItems.Count > 0)
     textBox1.Text = people[listView1.SelectedItems[0].Index].Name;
 }
于 2012-11-09T22:09:12.000 に答える
0

自分の人物を一覧表示して[人物の一覧表示]を削除する場合は、次に行う必要があります。

-Person.Nameを返すPerson関数ToString()に追加すると、ListBoxは任意のオブジェクトを保持できますが、表示されるテキストはobject.ToString()です。

public override string ToString() 
{
  return Name;
}

-ボタンをクリックすると、人の名前ではなく、人をlistView1に追加する必要があります。

private void button2_Click(object sender, EventArgs e)
{
    Person p = new Person();
    p.Name = textBox1.Text;

    people.Add(p);
    listBox1.Items.Add(p);
}

-これで、listViewがStringではなくPersonを保持するため、personを取得できます。

private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{
  textBox1.Text = ((Person)listView1.SelectedItems[0]).Name;
}
于 2012-11-09T22:27:52.633 に答える
0

アイテムが選択されていない短い期間があります。最初のアイテムが選択解除された直後で、新しいアイテムが選択される前です。やりたいことをする前に、選択されたアイテムがあるかどうかをコードでチェックインする必要があります。

于 2012-11-09T22:08:53.593 に答える
0

"Items"ListBoxオブジェクトのプロパティにあるデータを確認し、それを"people"変数と比較することをお勧めします。"SelectedIndexChanged"イベントの発生時に同期されていないことを確認してください。

それが役に立てば幸い

乾杯

于 2012-11-09T22:10:28.613 に答える