CListBox中,怎么样使光标自动下移,请各位帮忙修改下代码

hhkun0120 2011-01-07 11:50:07
题设条件:两个CListBox,分别为A,B。A中假设有数据(a,b,c,d)。
A,B中间有一按钮使A中的数据单个进入B中。
为了实现将A中的一条数据进入B中(代码未附),并且A中的光标自动下移,我编写代码如下:

void bnMoveCursor(CListBox & clb){
int k=clb.GetCurSel();
if(k==-1){//没有选中任何一条数据
clb.SetCurSel(0);//选中ClistBox 中首条数据
}else{
clb.SetCurSel(++k);
}
}


这样的情况下,在为选中任何一条数据的情况下,A中数据可以很顺利进入B中。但是,如果,在A中手动选择一条数据后,比如选择数据a,执行之后,a不会进入B中,而光标下移,b进入B中。我知道,这是由于(++K)的缘故。但是,不知如何修改。请各位帮忙。
如果各位还有什么好的办法实现的话,请不吝指教。
...全文
130 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
hhkun0120 2011-01-13
  • 打赏
  • 举报
回复
的确是逻辑出了问题,到后来代码改成了

int k=m_listA.GetCurSel();
if(k==-1){
m_listA.SetCurSel(0);
}else{
bnClickButton(m_listA,m_listB);
m_listA.SetCurSel(++k);
}

问题基本解决了。[Quote=引用 12 楼 xianglitian 的回复:]

那是你逻辑的问题
再好好组织一下你的代码
知道问题在哪也就好办了
[/Quote]
向立天 2011-01-10
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 hhkun0120 的回复:]
bnMoveCursor(CListBox & clb)这个方法先执行

引用 8 楼 xianglitian 的回复:

这两段代码谁先执行
[/Quote]
调换顺序试试
你在bnMoveCursor中移动了光标
当然bnClickButton时就出问题了
hhkun0120 2011-01-10
  • 打赏
  • 举报
回复
bnMoveCursor(CListBox & clb)这个方法先执行[Quote=引用 8 楼 xianglitian 的回复:]

这两段代码谁先执行
[/Quote]
向立天 2011-01-10
  • 打赏
  • 举报
回复
这两段代码谁先执行
hhkun0120 2011-01-10
  • 打赏
  • 举报
回复
移动条目的代码如下:

void bnClickButton(CListBox & arg1,CListBox & arg2){
CString strTemp;
arg1.GetText(arg1.GetCurSel(),strTemp);
AfxMessageBox(strTemp);
if((arg2.FindString(-1,strTemp)==-1)){
arg2.AddString(strTemp);
}
else{

}
}

哪里出问题了呢?[Quote=引用 3 楼 xianglitian 的回复:]

我觉得你这里的代码没有问题
问题出在移动条目的代码
[/Quote]
向立天 2011-01-10
  • 打赏
  • 举报
回复
那是你逻辑的问题
再好好组织一下你的代码
知道问题在哪也就好办了
hhkun0120 2011-01-10
  • 打赏
  • 举报
回复
如果移动顺序的话, bnClickButton()中的GetText()方法便会报错的。
所以移动不行啊。[Quote=引用 10 楼 xianglitian 的回复:]

引用 9 楼 hhkun0120 的回复:
bnMoveCursor(CListBox & clb)这个方法先执行

引用 8 楼 xianglitian 的回复:

这两段代码谁先执行

调换顺序试试
你在bnMoveCursor中移动了光标
当然bnClickButton时就出问题了
[/Quote]
zgsdzhaolanxiang1 2011-01-08
  • 打赏
  • 举报
回复
滚动条 最下方
/*int count = 0;
count = m_list.GetCount();
m_list.SetCurSel(count - 1);*/
::SendMessage(m_list.m_hWnd,WM_VSCROLL,MAKEWPARAM(SB_BOTTOM,0),NULL);
tigerMayDo 2011-01-08
  • 打赏
  • 举报
回复

void CListboxDlg::OnButton1()
{
int k=m_list1.GetCurSel();
if(k==-1){//没有选中任何一条数据
m_list1.SetCurSel(0);//选中ClistBox 中首条数据
}else{
CString str;
m_list1.GetText(k,str);
m_list2.AddString(str);
m_list1.SetCurSel(++k);
}
}

这样的代码没问题 手动选择也可以
RedProgramer 2011-01-08
  • 打赏
  • 举报
回复
对A增加LBN_SELCHANGE消息处理函数,在其中根据现在的选中情况设置B的当前选择
向立天 2011-01-08
  • 打赏
  • 举报
回复
我觉得你这里的代码没有问题
问题出在移动条目的代码
jyh_baoding 2011-01-08
  • 打赏
  • 举报
回复
是不是B中为添加成功导致啊,跟踪一下
  • 打赏
  • 举报
回复
囧。题目都不要清楚, 你的A在什么地方操作的啊
把clb.SetCurSel(++k);换成clb.SetCurSel(k++);试试

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧