このリストビュー オブジェクトにまた困惑しました。Windows フォームのリストビューから選択したリストビュー項目を取得しようとすると、コードが「範囲外の添字」エラーを発生させます。VS add watch コマンドを使用すると、次のように表示されます listview オブジェクトのウォッチを見ると、次のように表示されます
this.SearchResults {System.Windows.Forms.ListView, Items.Count: 52, Items[0]: ListViewItem: {0}} System.Windows.Forms.ListView
したがって、正しい 52 のカウントが表示され、プログラムの実行中にコレクションから行を選択できます。たとえば、コレクションから 5 番目のアイテムを選択するとします。ウォッチは以下を返します
this.SearchResults.SelectedIndices[0] 5 int
したがって、インデックスを使用して、さらに処理するために listviewitem を別のオブジェクトにのみ渡したいと思います。これを試すと、実行時エラーが発生します
An unhandled exception of type 'System.ArgumentOutOfRangeException' occurred in System.Windows.Forms.dll
Additional information: InvalidArgument=Value of '5' is not valid for 'index'.
これはどのように可能ですか?私は52個のアイテムを持っていますが、リストビューが空であるかのようにコードが動作しています。インデックスをハードコーディングしようとしましたが、それもうまくいきませんでした。
このフォームのリストビューのコンストラクターの私のコードは以下のとおりです
public ResultsDisplay(List<MATS_Doc> foundDocs)
{
InitializeComponent();
this.CenterToScreen();
this.SearchResults.Columns.Add("Title");
this.SearchResults.Columns.Add("Stuff");
foreach (MATS_Doc doc in foundDocs)
{
// retrieve coresponding document
// create new ListViewItem
ListViewItem searchResults = new ListViewItem(doc.Id.ToString());
searchResults.SubItems.Add(doc.Title);
searchResults.SubItems.Add(doc.Stuff);
// add the listviewitem to a new row of the ListView control
this.SearchResults.Items.Add(searchResults); //show Text1 in column1, Text2 in col2
}
foreach (ColumnHeader column in this.SearchResults.Columns)
{
column.Width = -2;
}
this.Show();
}
アップデート
以下は、例外がスローされるコードです。リストビューは同じ形式です
if (scoredListing == null)
{
DocumentView showdoc = new DocumentView(this.SearchResults.SelectedItems[this.SearchResults.SelectedIndices[0]]);
showdoc.ShowDialog();
}