- PR -

ListViewSubItemについて

1
投稿者投稿内容
うっど
会議室デビュー日: 2004/08/10
投稿数: 11
投稿日時: 2007-03-08 16:30
こんにちは。

リストビューコントロールのサブアイテムの描画で少々納得できないことがあり、
投稿します。

サブアイテム部分は数パターンの値しか入らないのでサブアイテムのオブジェクトを
共有しようと思い、試しました。

オブジェクトの共有自体はできたのですが、その値を変更したときに画面上で変更されません。
こういうものなのでしょうか?

以下に簡単な再現コードを書きます。


private ListViewItem.ListViewSubItem mySubItem=new ListViewItem.ListViewSubItem();

private void サブアイテム共有()
{
this.mySubItem.Text="共有";

for (int i=0;i<10000;i++)
{
ListViewItem item=new ListViewItem();
item.Text=i.ToString();
item.SubItems.Add(this.mySubItem);
this.listView1.Items.Add(item);
}

}

private void 共有サブアイテムテキスト変更()
{
this.mySubItem.Text="変更";
MessageBox.Show(this.listView1.Items[0].SubItems[1].Text);
//メッセージボックスには"変更"と表示されるがリストビュー内に表示されているのは
//"共有"のまま
}

OSはWindows2000、Frameworkは1.1を使用しています。


うっど
会議室デビュー日: 2004/08/10
投稿数: 11
投稿日時: 2007-03-08 16:36
うっ、直に変更しても表示は変わりませんでした・・・・
this.listView1.Items[0].SubItems[1].Text="変更";
MessageBox.Show(this.listView1.Items[0].SubItems[1].Text);
//メッセージボックスには"変更"と表示されるがリストビュー内に表示されているのは
//"共有"のまま

こういうものなのでしょうか?
ダッチ
大ベテラン
会議室デビュー日: 2005/10/31
投稿数: 113
投稿日時: 2007-03-09 22:55
うっどさん、こんにちは
ダッチです。

引用:

うっどさんの書き込み (2007-03-08 16:30) より:
こんにちは。

リストビューコントロールのサブアイテムの描画で少々納得できないことがあり、
投稿します。

サブアイテム部分は数パターンの値しか入らないのでサブアイテムのオブジェクトを
共有しようと思い、試しました。

オブジェクトの共有自体はできたのですが、その値を変更したときに画面上で変更されません。
こういうものなのでしょうか?

以下に簡単な再現コードを書きます。


private ListViewItem.ListViewSubItem mySubItem=new ListViewItem.ListViewSubItem();


ListViewItem.ListViewSubItem のコンストラクの別のオーバーロードに owner : ListViewItem を取るものがあります。
その owner に設定された ListViewItem 内でしか共有されないようです。
そのため、複数の ListViewItem にまたがっての共有は出来ないですね。
無理やり使用としても今回の現象が発生するようです。
うっど
会議室デビュー日: 2004/08/10
投稿数: 11
投稿日時: 2007-03-13 13:04
ダッチさん、ご回答ありがとうございました。
やはりこういうものなのですね、共有はあきらめます。
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2007-03-13 13:09
ListViewSubItem以外でも通常「共有」なんてできないんじゃない?
自身のハンドルと親ハンドルの関係で。
うっど
会議室デビュー日: 2004/08/10
投稿数: 11
投稿日時: 2007-03-13 18:13
ぶさいくろうさん、こんにちは。
ListViewSubItemはオブジェクトから派生したものなので
できるかなと愚考した次第です。
結局駄目だったわけですが・・・
1

スキルアップ/キャリアアップ(JOB@IT)