リストコントロールのインデックスの取得 – プログラミング – Home

リストコントロールのインデックスの取得
 
通知
すべてクリア

[解決済] リストコントロールのインデックスの取得


大輔
 大輔
(@大輔)
ゲスト
結合: 14年前
投稿: 2
Topic starter  

リストコントロールのレポートビュー形式で、
 _____ ______ ______ ______
| 日 付 | 氏  名 | 出勤時刻 | 退勤時刻 |
| 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);

~略~

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


引用未解決
トピックタグ
瀬戸っぷ
 瀬戸っぷ
(@瀬戸っぷ)
ゲスト
結合: 18年前
投稿: 178
 

>ボタン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); // 退勤時刻の場合

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


返信引用
大輔
 大輔
(@大輔)
ゲスト
結合: 14年前
投稿: 2
Topic starter  

瀬戸っぷさん

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました