VC++初心者ですのでよろしくお願いいたします.
ツリービューの取扱いに関して質問させてください.
【実現したいこと】
ランダム生成されるID(数字)をツリービューに表示.
IDがランダム生成される度にツリービューを更新.
【問題となっている点】
1回目にIDが生成されるとツリービューに正しく表示
される.
しかし,2回目以降は1回目のツリービューが消去されずに
,連続して記述されてしまう.
[1回目実行]
-ID
-12
-84
-35
[2回目実行]
-ID
-12
-84
-35
-ID
-98
-33
-41
そこで,DeleteItem()/DeleteAllItemsを使用してID生成の
度に,最初に全てのアイテムを消去することにしました
(ID生成はボタンを使用).
しかし,その場合,ツリービューには一切何も表示され
ません.何度,ボタンを押してIDを生成しても表示され
ません.
以下に検証のために作成したソースを記述いたします.
以下を実行すると,『表示』を押しても何もツリービュー
に現れません.OnBnClickedButton2()のDeleteAllItems()を
コメントアウトすると,『表示』を押すとIDを親とするツリー
が積み重なっていき,初期化されません.
【インクルードファイル】
static HTREEITEM plate[10];
static HTREEITEM id[100];
【ソース】
ツリービューとボタン2個を使用
ツリービューに表示するIDはfor文のループ回数です.
ボタン1はID表示用の『表示』です.
ボタン2はツリービュー初期化用の『消去』です.
// ボタン1のコントロール
void Ctrial03Dlg::OnBnClickedButton1()
{
// 本関数の最初に以下を記述すればボタン1を押す度に初期化???
//my_tree_view.DeleteAllItems();
int i;
CString id_text;
plate[0] = my_tree_view.InsertItem("ID", TVI_ROOT);
for(i = 0; i < 10; i++){
id_text.Format("%d", i);
id[i] = my_tree_view.InsertItem((LPCTSTR)id_text, plate[0]);
}
}
// ボタン2のコントロール
void Ctrial03Dlg::OnBnClickedButton2()
{
// TODO : ここにコントロール通知ハンドラ コードを追加します。
my_tree_view.DeleteAllItems();
//my_tree_view.DeleteItem(plate_tree[0]);
}
素人な質問で申し訳有りませんが,アドバイスお願いいたします.
Google先生で調べてみましたが,参考になるサンプルを見つけれ
ませんでした.
こんにちは
私も同じ問題で悩んでました。
#でもって、Googleでこのページにたどり着いたりしたのですが・・・。
結局、原因は不明。
何故こうなるのか不思議です。
対処法ではないですが、逃げ道はありますのでご紹介します。
1.表示中のアイテムハンドルを保存しておく
2.新しいアイテムを追加する
3.1で保存しておいたアイテムを消す
これで希望通りの動作をすると思います。(私はしました)
ツイート | ![]() |