hur.cn - 华软网

 热门搜索

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

  作者:未知    来源:网络    更新时间:2011/1/7
题设条件:两个CListBox,分别为A,B。A中假定有数据(a,b,c,d)。
A,B中间有一按钮使A中的数据单个进入B中。
为了实现将A中的一条数据进入B中(代码未附),而且A中的光标自动下移,我编写代码以下:
C++">
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)的缘故。然则,不知如何修改。请列位帮助。
如果列位另有什么好的措施实现的话,请不吝珠玉。
---华软 网友回答---
囧。题目都不要清楚, 你的A在什么地方操作的啊
把clb.SetCurSel(++k);换成clb.SetCurSel(k++);试试


---华软网友回复---
是否是B中为增加成功致使啊,追踪一下
---华软网友回复---
我觉得你这里的代码没有问题
问题出在移动条目的代码
---华软网友回复---
对A增加LBN_SELCHANGE消息措置惩罚函数,在其中根据现在的选中情况设置B的当前选择
---华软网友回复---
C++">
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);
    }
}

这样的代码没问题 手动选择也能够
---华软网友回复---
 滚动条 最下方
   /*int count = 0;
count = m_list.GetCount();
m_list.SetCurSel(count - 1);*/
::SendMessage(m_list.m_hWnd,WM_VSCROLL,MAKEWPARAM(SB_BOTTOM,0),NULL);
---华软网友回复---
移动条目的代码以下:
C++">
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{

}
}

那里出问题了呢?
引用 3 楼 xianglitian 的回复:
我觉得你这里的代码没有问题
问题出在移动条目的代码

---华软网友回复---
这两段代码谁先执行
---华软网友回复---
bnMoveCursor(CListBox & clb)这个方法先执行
引用 8 楼 xianglitian 的回复:
这两段代码谁先执行

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

引用 8 楼 xianglitian 的回复:

这两段代码谁先执行

调换顺序试试
你在bnMoveCursor中移动了光标
当然bnClickButton时就出问题了
---华软网友回复---
如果移动顺序的话, bnClickButton()中的GetText()方法便会报错的。
所以移动不行啊。
引用 10 楼 xianglitian 的回复:
引用 9 楼 hhkun0120 的回复:
bnMoveCursor(CListBox & clb)这个方法先执行

引用 8 楼 xianglitian 的回复:

这两段代码谁先执行

调换顺序试试
你在bnMoveCursor中移动了光标
当然bnClickButton时就出问题了

---华软网友回复---
那是你逻辑的问题
再好好组织一下你的代码
知道问题在哪也就好办了
---华软网友回复---
的确是逻辑出了问题,到后来代码改成了

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

问题基本解决了。
引用 12 楼 xianglitian 的回复:
那是你逻辑的问题
再好好组织一下你的代码
知道问题在哪也就好办了
     
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。