2016-09-09 4 views
1

listViewのサブアイテムに、ビュー自体にアイテムが既に追加された後に、そのサブアイテムを設定しようとしています。これは間違いを投げかけています。私が間違っているのか、それが作成された後にサブアイテムに追加することができないのかどうかはわかりません。既存のListViewSubItemsにテキストを追加することができます

という名前のWindowsフォームを作成しました。これは、非常に想像力の高いlistView1という名前で、コンポーネントとそれに対して実行可能な可能なハッシュ関数が設定されています。 listView1

これはうまく動作し、私が望むように設定されています。ここで、ユーザーは、各コンポーネントでこれらのハッシュ関数を実行するはずのボタンをクリックし、それぞれの右側に適切なボックスを入力します。

私は各ボックスに記入することはできません。私のコード:

//Put the verification in the appropriate column, and line 
//Iterate through each row until the appropriate one is found 
for(int j=0;j<this->listView1->Items->Count;j++){ 
    //When the row matches the component that was just verified, add things to that row 
    if(this->listView1->Items[j]->Text == response->componentID){ 
     //Now that the row has been successfully found, find the column 
     for(int k=1;k<this->listView1->Columns->Count;k++){ 
     //When the column matches the algorithm that was just ran, add the result 
     if(this->listView1->Columns[k]->Text == response->algorithmType.ToString()){ 
      //****The line giving me trouble 
      this->listView1->Items[j]->SubItems[k]->Text = response->verifyResult; 
      //****End of troublesome line 
     } 
     } 
    } 
    } 

次のポップアップでの結果であるとして、それを実行する listView1ErrorMessage

私はちょうどに「新」の項目を追加する前listView1から再び、その後明確な項目のすべてを作成する必要がありますかそれ?それとも、このコードは救済可能ですか?

+0

なぜkは1から始まるのですか?列インデックスとサブアイテムインデックスにkが使われるのはなぜですか? –

+0

kは0番目の列がcomponentIDなので、1から始まるので、それを見る必要はありません。私は両方のためのKを使用している(私の列の私の理解)は、サブ項目が列と一致することです。 –

+0

@WayneO最初にサブ項目を追加する必要があります。 'SubItems'コレクションはデフォルトでは空です。 'Item.SubItems.Add(" some text ")'を使っていくつかのサブアイテムを追加しました。次に、必要に応じて索引を使用してサブアイテムのテキストを変更できます。 –

答えて

1

ListView.SubItemsデフォルトでは、コレクションは空です。最初にサブアイテムを追加する必要があります。たとえば、サブアイテムコレクションの方法はAddです。次に、いくつかのサブアイテムを追加した後、必要に応じてインデックスを使用してサブアイテムのテキストを変更することができます。また

this->listView1->Items[i]->SubItems->Add("Some text for SubItem"); 

コレクション内のサブ項目に取り組んで、インデックス0は、コレクションを所有しているアイテムですので、サブ項目のための1から始まるインデックスを使用します。

this->listView1->Items[i]->SubItems[1]->Text = "Some new text"; 
関連する問題