昇順設定しかリストに行を追加するには?
お世話になります。VC++初心者です。
CListCtrlを用いた画面を開発しております。
CListCtrlコントロールを、プロパティ-スタイル-ソート昇順と設定し
その後は、コード上で、ソートに関しては何も考えずに
SetItemTextとInsertItemを用いて、データを追加するロジックを
書いておりました。
データを昇順で追加すると、正常にリスト表示されますが
データを降順で追加すると(コントロールのソート機能が反応?すると)
なぜか一番最後の行しか、まともにデータが設定されておりません。
追加している間にソート機能が働いて、インデックスが訳わからない事に
なっているのでしょうか。
どのようにすればいいのか、教えて頂けますでしょうか。
> 昇順設定しかリストに行を追加するには?
昇順設定し「た」リストに行を追加するには?
ですよね?(最初意味がわかりませんでした。)
で、何がしたいのでしょうか。
> データを降順で追加すると(コントロールのソート機能が反応?すると)
> なぜか一番最後の行しか、まともにデータが設定されておりません。
「まとも」とは何を基準にそう判断したのでしょうか。
また、開発環境を明示してください。
例えば、Windows2000sp4/VC++6sp6/ダイアログベース/MFC のように。
InsertItemの戻り値をSetItemTextのパラメータに指定すれば直る気がします。
詳細はHELP参照。
失礼致しました。
開発環境は 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により値を設定しております。
> 1、2、3行目それぞれ1、2、3列目の対する値を設定しているにも関わらず
> 1行目、2行目の2列目、3列目は空になってしまい
ここの、具体的なソースコードを載せてみてはいかがでしょうか?
>なんとなく(?)さん
ご回答有難うございました。
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);
}
今気付きましたが
タイトルが「昇順設定しか」になっていたんですね(汗)
たびたび失礼致しました
解決時チェックをしておりませんでした。
たびたび失礼しました(_ _)
ツイート | ![]() |