ListViewの複数選択について

このQ&Aのポイント
  • VBAでListViewを使い、DBの情報を出力している際に、最初の選択行に色をつける方法を教えてください。
  • また、ListViewで複数件選択された場合のIndexの取得方法も教えてください。
  • 初心者のため、詳細な説明をお願いします。
回答を見る
  • ベストアンサー

ListViewの複数選択について

こんにちは。 VBAでListViewを使い、DBの情報を出力しているのですが、ListViewに出力すると、必ず、1行目が選択されています。その選択自体はいいのですが、選択されているところに色付けがされていないのです。他のところを選択すると色がちゃんと付きます。どうすれば、最初の選択行に色をつけることが出来るのか教えてください。 それから、ListViewで複数件選択された場合のIndexの取り方を教えてください。今は以下のようにして1件だけは取得できています。 s = Userform2.ListView1.SelectedItem.Index 初心者なので、なるべく詳しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

1. HideSelectionプロパティをfalse ->好み、ソフトの性質にもよりますが... または、DBの情報を表示し終ったときに下記コード If Userform2.ListView1.Listitems.Count <> 0 Then   Set Userform2.ListView1.SelectedItem = Userform2.ListView1.ListItems(1) End If 2. With Userform2.ListView1   'リストビューの最後までループ   For i = 1 To .ListItems.Count Step 1     '選択されているか?     If .ListItems(i).Selected = True Then       '選択時の処理            End If   Next i End With アイデア次第...

poporikomanaka
質問者

お礼

なるほど、なるほど。参考になりました。ありがとうございました。

関連するQ&A

  • ListViewについて

    いつもお世話になっています。 タイトルの通り、ListViewについて2つ質問があります。 (1)ListViewにDBから検索したデータを代入してますが、動きが遅いんです。  各項目ごとで色を変更したりするためだと思いますが、ListViewの表示を速くする方法はなにかありませんか?  ちなみに今は、ListViewを2枚使って、データをセットしている間は、VisibleをFalseにして、  データセットが完了した時点で、Trueに切り替えています。 (2)(1)の動きで、ListViewを使っているところ、今表示されているListView(Iとします)で  クリックしたデータを次に表示させるListView(IIとします)に引き継がせたいです。  Iで、選択している行をIIで選択状態にすることはできたのですが、  Iで選択している行がスクロールして下にあった場合、IIでもスクロールした場所に  ListViewを移動させたいのですが、その方法が分かりません。 何かご存知の方がいましたら、教えてください。 よろしくお願いいたします。

  • ListViewで複数選択された項目を一度に削除する方法

    ListViewで選択された複数のアイテムの値の取得方法と複数選択された項目を一度に削除する方法を教えてください。

  • ListViewの複数項目削除で再度質問です

    ArrayListのソートの件とListViewのおかしな挙動は解決できたのですが 最初に質問して解決したはずの削除の部分で再び分からなくなって しまったので質問させて頂きます。 今回は本体に今までのコードを正式に組み込んで、動作の確認を 行っていたのですが、複数件(連続や個別選択)のデータ削除を 行おうとしたら意図しないデータ(未整列状態の並びのデータ)が 削除されてしまうという事態が発生してしまいました。 これはどうすれば解決できるのでしょうか? また複数件の未読既読を制御(選択された項目に対してフラグを 入れ替える)するのも同様の方法で出来るのでしょうか? 環境はVS2005(C#)、.NET Framework2.0です。 以下に問題の削除時のコードを載せます。 private void menuDelete_Click(object sender, EventArgs e) { // 選択アイテムが0のときは反応にしない if(listView1.SelectedItems.Count == 0){ return; } if(listView1.Columns[0].Text == "差出人"){ // 受信メールのとき for (int sel_index = listView1.Items.Count - 1; sel_index > -1; sel_index--) { if (listView1.Items[sel_index].Selected) { collectionMail[DELETE].Add(collectionMail[RECEIVE][sel_index]); collectionMail[RECEIVE].RemoveAt(sel_index); } } this.textBody.Text = ""; } else if(listView1.Columns[0].Text == "宛先"){ // 送信メールのとき for (int sel_index = listView1.Items.Count - 1; sel_index > -1; sel_index--) { if (listView1.Items[sel_index].Selected) { collectionMail[DELETE].Add(collectionMail[SEND][sel_index]); collectionMail[SEND].RemoveAt(sel_index); } } this.textBody.Text = ""; } else if(listView1.Columns[0].Text == "差出人または宛先"){ // 削除メールのとき if(MessageBox.Show("選択されたメールは完全に削除されます。\nよろしいですか?", "確認", MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation) == DialogResult.OK){ for (int sel_index = listView1.Items.Count - 1; sel_index > -1; sel_index--) { if (listView1.Items[sel_index].Selected) { collectionMail[DELETE].RemoveAt(sel_index); } } this.textBody.Text = ""; } } // ツリービューとリストビューの表示を更新する UpdateTreeView(); UpdateListView(); // 選択している位置がリストの件数よりも少ないとき if(currentRow < listView1.Items.Count){ // 選択していた位置-1の行にフォーカスを当て直す listView1.Items[currentRow - 1].Selected = true; listView1.Items[currentRow - 1].Focused = true; listView1.SelectedItems[0].EnsureVisible(); listView1.Select(); listView1.Focus(); } else{ // リストの件数が1以上の時 if(listView1.Items.Count > 0){ // ListViewの行数位置-1の行にフォーカスを当て直す listView1.Items[listView1.Items.Count - 1].Selected = true; listView1.Items[listView1.Items.Count - 1].Focused = true; listView1.SelectedItems[0].EnsureVisible(); listView1.Select(); listView1.Focus(); } } }

  • ListViewの選択、選択解除を行いたい

    VB6.0にて開発をしています。 ListViewで複数選択を可能とし、 Ctrl+クリックで選択、選択解除をせずに、クリックのみで選択、選択解除を行いたいです。 その際、複数選択されている場合はクリックした行のみが選択・選択解除される状態にしたいです。 CheckBoxesプロパティで行う方法は見つけられたのですが、 checkboxesプロパティが使用できないため困っています。 なにか方法がありますでしょうか?

  • ListViewから選択中の文字列を取得

    VB2005の初心者です。 タイトル通り、ListViewから選択中の文字列によって処理を変えるプログラムを構築しようとしているのですが、うまくいきません。 ComboBoxの場合では Private Sub button1_Click~ If ComboBox1.SelectedItem = "テスト" Then 処理 End if でうまくいったのですが、ListViewの場合では Private Sub button1_Click~ If ListView1.SelectedItems = "テスト" Then 処理 End if と指定すると 「エラー 1 これらの引数で呼び出される、アクセス可能な '=' がないため、オーバーロードの解決に失敗しました」 とエラーがでます。 ListViewから選択中の文字列を取得するには「.SelectedItems」では取得できないのでしょうか? VBに詳しい方ご教授お願いします。

  • ListViewのフォーカスの位置の取得

    BCBでListViewを使ってプログラムを作っています。 そこでListViewのフォーカスある行が何行目にあるのかを取得したいと思っているのですが、うまくいきません。 選択位置は ListView1->ItemIndex で行数を取得できますが、選択位置ではなく、フォーカスの位置を知りたいと思っています。 ListView1->ItemFocused で取得できるのかと思ったのですが、うまく扱うことが出来ません。 どなたかご助力をお願い致します。

  • ListViewで表示されたデータの選択行指定

    ListViewで複数行データが表示されている場合に指定の行を選択状態にする事は可能なのでしょうか?いろいろ調べているのですが分かりません。ご存知の方いらっしゃいましたらよろしくお願いします。

  • BASIC ListViewの選択された行番号を取得

    ActiveBasic4.23.00を使用しています。 ListViewで、ボタンを押すと選択されている行の番号(ListBoxで言うところのLB_GETCURSEL) を取得したいのですが、それらしい項目が見当たりません。 ご存知の方がいらっしゃいましたら、ご教授ください

  • ListViewの複数項目削除で意図しない挙動

    前回質問した内容でほとんど複数削除は解決したように 見えたのですが、どういう条件か分からないのですが 複数選択(1件選択の場合は発生しない)して削除ロジックを 実行すると選択している項目と異なる内容の配列(ArrayList)の データを削除してしまうという事が発生します。 これは何が原因で発生しているのでしょうか? またこれの解決法をご教授頂けないでしょうか。 環境はVS2005(C#)、.NET Framework2.0です。 以下に該当部分のコードを載せます。 2000文字を超えてしまったので問題の部分以外は省略しました。 ※添付画像が見にくかったので以下のURLに再掲示しましたので 参考にしてもらえるとありがたいです。 http://angelteatime.punyu.net/questionbox_20090312.jpg 画像では350件ある受信メール(ArrayListに1件ずつMailクラスで 格納されている)の先頭から8件ぐらい選択削除をしようとしている 画面です。 private void menuDelete_Click(object sender, EventArgs e) { // 選択アイテムが0のときは反応にしない if(listView1.SelectedItems.Count == 0){ return; } if(listView1.Columns[0].Text == "差出人"){ // 受信メールのとき for (int sel_index = listView1.Items.Count - 1; sel_index > -1; sel_index--) { if (listView1.Items[sel_index].Selected) { int nIndex = (int)listView1.Items[sel_index].Tag; if (listView1.Items[sel_index].SubItems[1].Text == ((Mail)collectionMail[RECEIVE][nIndex]).subject) { collectionMail[DELETE].Add(collectionMail[RECEIVE][nIndex]); collectionMail[RECEIVE].RemoveAt(nIndex); } else{ MessageBox.Show(string.Format("選択した件名と削除するデータが異なっています。\nリスト位置件名:{0}\n実位置件名:{1}\n(リスト位置:{2}, 実位置:{3}", listView1.Items[sel_index].SubItems[1].Text, ((Mail)collectionMail[RECEIVE][nIndex]).subject, sel_index, nIndex), "エラー", MessageBoxButtons.OK, MessageBoxIcon.Warning); } } } this.textBody.Text = ""; } else if(listView1.Columns[0].Text == "宛先"){ (上記のRECEIVEがSENDに変更のみでロジック変更なし) } else if(listView1.Columns[0].Text == "差出人または宛先"){ (上記のDELETEに変更されDELETEの配列に格納されたデータを削除) } // ツリービューとリストビューの表示を更新する UpdateTreeView(); UpdateListView(); (ListViewのフォーカスを設定し直す) }

  • ListViewのチェックボックス(C#)

    ご教授下さい。 ListViewの中にチェックボックスを作りました。 次の画面に遷移するときに、ListView内のチェックボックスで選択された場所の値はどうとればいいのでしょうか? 10行の列があれば、チェックボックスで選択されたすべての行の番号を取得したいです。 宜しくお願いいたします・