リストコントロールのインデックスの取得

[戻る]
大輔 2010/11/28(日) 02:42:43
リストコントロールのレポートビュー形式で、
 _____ ______ ______ ______
| 日 付 | 氏  名 | 出勤時刻 | 退勤時刻 |
| 11/28  | 鈴木一郎 | 8:45   |      |
| 11/28  | 高橋次郎 | 8:43   |      |

ボタン1をクリックすると出勤時刻を
ボタン2をクリックすると退勤時刻を
それぞれ自動で登録するようなプログラムを作りたいのですが

退勤時刻を登録するさいに、どのようにしてそれぞれの氏名の退勤時刻の
サブアイテムの位置を取得したらいいのかがわかりません。

ためしにプログラムを
〜略〜

LVFINDINFO info;
int        index = -1;
CString    str1,str2;

while ((index = m_listview2.GetNextItem(index, LVNI_ALL | LVNI_SELECTED)) != -1)
{
    //もう1つのリストコンロトールから社員情報を取得
    str1 = m_listview2.GetItemText(index, 0);
    str2 = m_listview2.GetItemText(index, 1);//社員の名前
}
info.flags = LVFI_PARTIAL|LVFI_STRING;
info.psz = str2;

while ((index = m_listview1.GetNextItem(index, LVNI_ALL) != -1))
{
    nItem = m_listview1.FindItem(&info);
}
m_listview1.SetItem(nItem,3,LVIF_TEXT, csy + " " + csm , 0, 0, 0, 0);

〜略〜

のようにしてみましたが、うまくいきませんでした。
どなたかご助言よろしくお願いします。

瀬戸っぷ [E-Mail] 2010/11/28(日) 23:46:55
>ボタン1をクリックすると出勤時刻を
>ボタン2をクリックすると退勤時刻を

掲示されているコードでは今のところ無関係とみていいのですかね?
おそらくどっちかのボタンのプロシージャ内の処理かとは思われますが…。

>    str1 = m_listview2.GetItemText(index, 0);
>    str2 = m_listview2.GetItemText(index, 1);//社員の名前

str1(というかm_listview2のiSubItem=0)が何物か不明…です。
まぁ、この後でも参照していないのであれば無視しても問題ないでしょうか。

>while ((index = m_listview1.GetNextItem(index, LVNI_ALL) != -1))
>{
>    nItem = m_listview1.FindItem(&info);
>}
>m_listview1.SetItem(nItem,3,LVIF_TEXT, csy + " " + csm , 0, 0, 0, 0);

whileループ開始時のindexが、別のリストコントロールのインデックスからになっていま
すがソレは期待通りという認識でいいですか?
検索するなら最初から…かと思われますが……。
で、ループ内ではm_listview1.GetNextItem()で取得したインデックスは未使用みたいで
すが…。


とりあえず…
m_listview1とm_listview2がどういう構成なのか見えてこないのでどうにも…。
サブアイテムがいくつあって、それぞれ何が入っているのか……。

最初の表を見る限りでは、リストコントロール1つで十分かと思われますが…。

m_ListViewWorking.InsertColumn(0, "日付", LVCFMT_LEFT, 60, 0);  // 左端の列は
LVCFMT_LEFTに…
m_ListViewWorking.InsertColumn(1, "氏名", LVCFMT_CENTER, 120, 1);
m_ListViewWorking.InsertColumn(2, "出勤時刻", LVCFMT_CENTER, 80, 2);
m_ListViewWorking.InsertColumn(3, "退勤時刻", LVCFMT_CENTER, 80, 3);
って感じであれば…


リストコントロールが選択された(スタイルでは単一選択を指定)ときにボタンを有効化、
ボタンが押された時に

index = m_ListViewWorking.GetSelectionMark();
m_ListViewWorking.SetItemText(index, 2, "8:45");   // 出勤時刻の場合
m_ListViewWorking.SetItemText(index, 3, "17:40");  // 退勤時刻の場合

という感じで設定できませんか?

大輔 2010/11/29(月) 18:31:14
[[解決]]
瀬戸っぷさん

ご指摘のとおりリストコントロールは1つで十分でした。
自分で勝手に難しく考えすぎていたみたいです。
とても参考になりました。回答ありがとうございました。

古いスレッドには追加発言できません。