2

リストビューで選択した行のインデックスを取得するのに問題があります。なぜこのコードが機能しないのだろうか?SelectedIndexの下に赤い線が表示されます

    private void lvRegAnimals_SelectedIndexChanged(object sender, EventArgs e)
    {
        int index = lvRegAnimals.SelectedIndex;
        string specialData = motelManager.GetInfoFromList(index);
        UppdateSpecialData(specialData);
    }

ヘルプは高く評価されています。ありがとう!

編集:

奇妙な理由で、listViewの行の1つをクリックすると、2つのメッセージが表示されます!?最初に前の番号を取得し、次に最後にクリックした行の番号を取得します。何が間違っている可能性がありますか?

 private void lvRegAnimals_SelectedIndexChanged(object sender, EventArgs e)
    {
        int index = lvRegAnimals.FocusedItem.Index;
        MessageBox.Show(Convert.ToString(index));
    }

次のようなチェックを追加すると、現在機能しています。

if(lvRegAnimals.SelectedIndices.Count > 0)
4

5 に答える 5

12

ListViewには。が含まれていないためSelectedIndex、代わりに。のプロパティがありSelectedIndicesます。

var indices = lvRegAnimals.SelectedIndices;
//indices[0] you can use that to access the first selected index

ListView.SelectedIndices

MultiSelectプロパティがtrueに設定されている場合、このプロパティは、ListViewで選択されているすべてのアイテムのインデックスを含むコレクションを返します。単一選択のListViewの場合、このプロパティは、ListViewで選択された唯一のアイテムのインデックスを含む単一の要素を含むコレクションを返します。

于 2012-07-04T07:39:00.350 に答える
0
private void listView1_SelectedIndexChanged(object sender, EventArgs e)
    {
        // Acquire SelectedItems reference.
        var selectedItems = listView1.SelectedItems;
        if (selectedItems.Count > 0)
        {
        // Display text of first item selected.
        this.Text = selectedItems[0].Text;
        }
        else
        {
        // Display default string.
        this.Text = "Empty";
        }
    }
于 2012-07-04T07:46:40.523 に答える
0

試す :

listView1.FocusedItem.Index

これにより、選択した行のインデックスが得られます。

于 2016-03-01T06:04:44.683 に答える
0

このような別のスレッドがありますが、ここでもまた行きます。

NULLを返すことができます。また、SelectedIndexChangedイベントを2回FIREDにすることもできます。そして初めて、まだ何も選択されていません。

したがって、それを見つける唯一の安全な方法は次のようになります。

    private void lv1_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (lv1.FocusedItem == null) return;
        int p = lv1.FocusedItem.Index;

...これで、intpの値は正しくなります。..

于 2017-06-04T18:05:06.333 に答える
0

ListViewは、ときどき操作するのが面倒です。私が使用した簡単な解決策は、選択したアイテムをチェックするforループです。

ListView内の「インデックス変更トリガー時」にソリューションを配置しました。例:

int sel_item = 0; //an int to store the selected item index.
private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{
      for (int i = 0; i < listView1.Items.Count; i++)
      {
             if (listView1.Items[i].Selected == true)
             {
              sel_item = i;
             }
      }
}

もちろん、これは「複数選択」オプションをに設定した場合にのみ正しく機能しますfalse

于 2022-02-27T19:11:33.007 に答える