--環境--
WinXP
VC6.0
MFC
--------
レポートタイプのリストビュー上で
1行をダブルクリックして、リストビューのアイテムを編集したいと考えています。
GetSelectionMark()を使って、ダブルクリックして選択された行数は
取得できたのですが、その後、リストビューにあるアイテムを
どうやってEditボックスに値を渡せばいいのかが分かりません。
現状のやり方は
nItem = m_LvData.GetSelectionMark();
で選択行番号を取得して、
CEdit* pedit = m_LvData.EditLabel(nItem);
といった感じにやっていますが、
EditLabelする前に、GetEditControl()を使って
Editボックスのオブジェクトを取得しないといけないのでしょうか?
Editボックスは、ダイアログ上の既存のm_edit1という
リストビューに入力するためのメンバ変数として
使っているものを使います。
書いている意味がいまひとつ分からないのですけれど、
やり方そのものが間違っていると言う事はないですか?
CListCtrl::EditLabelはリストコントロール上でインライン編集を
したいと気に使うものだと思います。
この場合、リストコントロールのスタイルにLVS_EDITLABELSが設定されていて
CListCtrl::EditLabelを呼べば、自動的にエディットボックスが表示されるはずです。
あとは、LVN_ENDLABELEDITを受けて編集内容を取り込めばOKです。
但し、アイテムテキストしか対象にならないのでサブアイテムも直接編集したいなら
自分ですべて実装する必要があります。
この場合は、LVS_EDITLABELSもいらないし、CListCtrl::EditLabelを使う必要も
ないと思います。
もし、別の位置にあるエディットボックスで編集したいのであれば、
単純にダブルクリックされたアイテムのTextを取得して
そのエディットボックスに設定すればいいと思います。
この場合も自前で実装する時と同じで
LVS_EDITLABELSもいらないし、CListCtrl::EditLabelを使う必要もないと思います。
誤字訂正。
誤)
したいと気に使うものだと思います。
正)
したい時に使うものだと思います。
>PATIOさん
ありがとうございます!
私がEditLabelの使い方を誤解していたようです。
理解できました。
>もし、別の位置にあるエディットボックスで編集したいのであれば、
>単純にダブルクリックされたアイテムのTextを取得して
>そのエディットボックスに設定すればいいと思います。
リストビューのアイテムをエディットボックスに
設定(コピー)する方法でやってみようと思います。
そこから、編集されたデータを、再びリストビューに
設定することでやってみようと思います。
SetWindowTextで解決しました!
ありがとうございました!