昇順設定しかリストに行を追加するには?

解決


いね  2006-03-14 04:56:00  No: 60934

昇順設定しかリストに行を追加するには?

お世話になります。VC++初心者です。
CListCtrlを用いた画面を開発しております。

CListCtrlコントロールを、プロパティ-スタイル-ソート昇順と設定し
その後は、コード上で、ソートに関しては何も考えずに
SetItemTextとInsertItemを用いて、データを追加するロジックを
書いておりました。

データを昇順で追加すると、正常にリスト表示されますが
データを降順で追加すると(コントロールのソート機能が反応?すると)
なぜか一番最後の行しか、まともにデータが設定されておりません。
追加している間にソート機能が働いて、インデックスが訳わからない事に
なっているのでしょうか。

どのようにすればいいのか、教えて頂けますでしょうか。


RAPT  2006-03-14 11:10:21  No: 60935

> 昇順設定しかリストに行を追加するには?
昇順設定し「た」リストに行を追加するには?
ですよね?(最初意味がわかりませんでした。)

で、何がしたいのでしょうか。
> データを降順で追加すると(コントロールのソート機能が反応?すると)
> なぜか一番最後の行しか、まともにデータが設定されておりません。
「まとも」とは何を基準にそう判断したのでしょうか。

また、開発環境を明示してください。
例えば、Windows2000sp4/VC++6sp6/ダイアログベース/MFC のように。


なんとなく  2006-03-14 18:33:41  No: 60936

InsertItemの戻り値をSetItemTextのパラメータに指定すれば直る気がします。
詳細はHELP参照。


いな  2006-03-14 18:41:10  No: 60937

失礼致しました。
開発環境は WindowsXP/VC++6.0/ダイアログベース/MFC です。

昇順設定し「た」リストへのデータ追加が正常に出来ません。
「まとも」ではない、とは(本当に、意味不明な表現を使って申し訳ございません)

例えば列を3つ持つリストに対し、行を3行追加した場合
1、2、3行目それぞれ1、2、3列目の対する値を設定しているにも関わらず
1行目、2行目の2列目、3列目は空になってしまい
3行目のみ、1、2、3列目が表示されている状態です。

↓こんな感じです。
col1    col2    col3
-----------------------
 1
 2
 3      test    test

各行に対し、1列目はSetItem、2、3列目はSetItemにより値を設定しております。


Blue  2006-03-14 18:46:50  No: 60938

> 1、2、3行目それぞれ1、2、3列目の対する値を設定しているにも関わらず
> 1行目、2行目の2列目、3列目は空になってしまい
ここの、具体的なソースコードを載せてみてはいかがでしょうか?


いな  2006-03-14 18:55:25  No: 60939

>なんとなく(?)さん

ご回答有難うございました。
InsertItemの戻り値を、SetItemの引数 LV_ITEM のiItemに
設定したところ、こちらが思うように動作確認できました。
(InsertItemのHELPを、きちんと隅々まで読んでおりませんでした)
この対応の半日費やした自分って一体。
本当に有難うございました。

>BLUEさん

考えて下さろうとして頂き、有難うございます。
お蔭様で、なんとなくさんの発言で、解決致しました。
とりあえず、修正しましたソースを晒します。

int i, newIdx;
LV_ITEM item;
※m_lst・・・CListCtrlコントロール変数

for(i = 0; i < 3; i++) {
  // 列1
  item.mask = LVIF_TEXT | LVIF_PARAM;
  item.pszText = plst[i]->col1;
  item.iItem = i;
  item.iSubItem = 0;
  item.lParam = i;
  newIdx = m_lst.InsertItem(&item);

  // 列2
  item.mask = LVIF_TEXT;
  item.pszText = plst[i]->col2;
  item.iItem = newIdx; 
  item.iSubItem = 1;
  m_lst.SetItem(&item);

  // 列3
  item.mask = LVIF_TEXT;
  item.pszText = plst[i]->col3;
  item.iItem = newIdx; 
  item.iSubItem = 2;
  m_lst.SetItem(&item);
}

今気付きましたが
タイトルが「昇順設定しか」になっていたんですね(汗)
たびたび失礼致しました


いな  2006-03-14 18:57:37  No: 60940

解決時チェックをしておりませんでした。
たびたび失礼しました(_ _)


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加