C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: 2つのリストビューを同時に選択させるには?


(過去ログ 125 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■74714 / inTopicNo.1)  2つのリストビューを同時に選択させるには?
  
□投稿者/ タカ (2回)-(2015/01/25(Sun) 23:37:38)

分類:[C#] 

こんにちは
タカです。

listview1とlistview2の
2つのリストビューがあった場合、
listview1の1行目を選択した場合に
listview2の1行目を同時に選択するようにするには
どうすれば良いのでしょうか?

下記のようにしてみましたが、駄目でした。
同時に選択する事が出来ません。

public int 前idx = 0;
private void listview1_SelectedIndexChanged(object sender, EventArgs e)
{
int idx = 0;
if (listview1.SelectedItems.Count > 0)
{
listview2.Items[idx].Selected = false;
idx = listview1.SelectedItems[0].Index;

listview2.Items[idx].Selected = true;
listview2.Select();
前idx = idx;
}
    }

どなたかアドバイスの程お願い致します。
引用返信 編集キー/
■74718 / inTopicNo.2)  Re[1]: 2つのリストビューを同時に選択させるには?
□投稿者/ Azulean (421回)-(2015/01/26(Mon) 00:26:06)
2015/01/26(Mon) 00:30:21 編集(投稿者)

No74714 (タカ さん) に返信
> 下記のようにしてみましたが、駄目でした。
> 同時に選択する事が出来ません。

青色の選択色が表示されることを「選択している」と表現されているのであれば、通常、できません。
理由はそのコントロールにフォーカスがあるときだけ、選択されているものが青くなるからです。

試しに、listview1 でいろいろと選択を変えた後、listview2 のアイテムがない空間をクリックしてみてください。
選択状態になっていることを確認できるはずです。
また、「前idx」という変数を定義しているのに使っていないことで、不具合が生じていることを視認できるかと思います。


通常はこのような動きになるのですが、フォーカスがないときも青色にしたいという、標準動作を書き換えたいという主旨の質問だったのでしょうか。
(HideSelection プロパティを false にすればマシにはなりますが、それ以上を求めると大変かも)
引用返信 編集キー/
■74719 / inTopicNo.3)  Re[1]: 2つのリストビューを同時に選択させるには?
□投稿者/ shu (675回)-(2015/01/26(Mon) 11:04:51)
No74714 (タカ さん) に返信

列固定のリストのようなものを作りたいのでしょうか?
だとすると2つのリストを連動させるのは大変なのでDataGridViewを使用された方がいいと思います。
はずしていたらすみません。
引用返信 編集キー/
■74721 / inTopicNo.4)  Re[1]: 2つのリストビューを同時に選択させるには?
□投稿者/ 魔界の仮面弁士 (203回)-(2015/01/26(Mon) 12:12:27)
> listview1とlistview2の
既定では "listview1" ではなく "listView1" という名前が付きますが、
今回は元質問に倣い、listview1 という名前として回答します。


> 2つのリストビューがあった場合、
ListView は、複数選択可能(MuliSelect = true)なコントロールですが、
双方の ListView ともに、MuliSelect = true のままという認識でよろしいですか?


> 下記のようにしてみましたが、駄目でした。
冒頭にある
  『listview2.Items[idx].Selected = false;』
という行は、常に idx = 0 の状態で実行されることになりますが、
それは意図したコードになっていますか?


> listview1の1行目を選択した場合に
> listview2の1行目を同時に選択するようにするには

FocusedItem は変更しなくて良いのですね。
とりあえず、こうかな?


private void Form1_Load(object sender, EventArgs e)
{
 listview2.HideSelection = false; // 選択状態が見えるようにしておく
 if (listview2.Items.Count > 0) listview2.Items[0].Selected = true;
}

private void listview1_SelectedIndexChanged(object sender, EventArgs e)
{
 /*
 ** 「listview1の1行目以外」を選択した場合は何もしないが、
 ** 「listview1の1行目」を選択した場合は「listView2の1行目」を選択する。
 */
 if (listview1.SelectedIndices.Count > 0 && listview1.SelectedIndices[0] == 0)
 {
  /*
  ** listview2の1行目「だけを」選択したい場合は事前に選択を Clear する必要がある。
  ** listview2の1行目「も」選択したい場合は、選択状態を Clear する必要は無い。
  */
  // listview2.SelectedIndices.Clear();
  if (listview2.Items.Count > 0)
  {
   listview2.Items[0].Selected = true;
  }
 }
}
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -