6

サーバーからリストビューにイベントログ名を取得する、作業中の小さなC#3.5WinFormsアプリがあります。これらのアイテムの1つを選択すると、次のように、SelectedItemsコレクションの最初のアイテムのテキストプロパティを取得することにより、SelectedIndexChangedイベントを使用して、選択したイベントログのイベントログエントリが別のリストビューに表示されます。

string logToGet = listView1.SelectedItems[0].Text;

これは最初は正常に機能しますが、最初のリストビューからのイベントログ名の2回目の選択は失敗します。何が起こっているのかというと、SelectedIndexChangedイベントが取得しているSelectedItemsコレクションが空であるため、ArgumentOutOfRangeExceptionが発生します。

私は途方に暮れています。私が間違っていることやこれを行うためのより良い方法についてのアイデアはありますか?

4

4 に答える 4

13

はい、その理由は、別のアイテムを選択すると、ListView は新しいアイテムを選択する前に SelectedItem の選択を解除するため、カウントが 1 から 0 になり、その後再び 1 になるためです。これを修正する 1 つの方法は、使用する前に SelectedItems コレクションに項目が含まれていることを確認することです。あなたのやり方は結構です、あなたはこれを考慮する必要があるだけです

例えば

if (listView1.SelectedItems.Count == 1)
{
    string logToGet = listView1.SelectedItems[0].Text;
}
于 2010-08-27T16:48:16.613 に答える
1

コレクションから値を取得する前に、SelectedItems コレクションに値があることを確認する必要があります。

何かのようなもの:

if(listView1.SelectedItems.Count > 0)
   //Do your stuff here
于 2010-08-27T16:49:42.913 に答える
0

新しい項目を選択すると、前の項目が最初に選択解除されます。コードを簡単なチェックでラップします。

if( listView1.SelectedItems.Count > 0)
{
 string logToGet = listView1.SelectedItems[0].Text;
}

これは、選択されたアイテムを無視して、選択されていないアイテムに変更します。

于 2010-08-27T16:50:57.153 に答える