首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

BCB中ListView控件selected跟checked的区别

2012-08-31 
BCB中ListView控件selected和checked的区别程序要求统计ListView中选中项的数目,程序大致如下:POINT posp

BCB中ListView控件selected和checked的区别
程序要求统计ListView中选中项的数目,程序大致如下:
 POINT pos;
 pos.x = Mouse->CursorPos.x;
 pos.y = Mouse->CursorPos.y;
 ::ScreenToClient(ListView->Handle,&pos);
 TListItem* Item = ListView->GetItemAt(pos.x,pos.y);

 bSelected = Item->Selected;
 bool bChecked = Item->Checked;

 if(bChecked && !bSelected)
  m_SelectNum ++;
else if(!bChecked && !bSelected)
  m_SelectNum --;
else if(bSelected && bChecked){
  m_SelectNum --;
  Item->Checked = false;
  Item->Selected = false;
  }
else if(bSelected && !bChecked){
  m_SelectNum ++;
  Item->Checked = true;
  Item->Selected = false;
  }

可是程序运行的,当以选中的项再次点击取消选中时,m_SelectNum的值就会出现问题,甚至多次点击一项后会出现负数,请各位大牛给指点一下!

[解决办法]
Selected是ListView当前选中的记录。而Checked为true则表示当前记录前面的复选框被选中。
[解决办法]
给你一个简单例子:

C/C++ code
void __fastcall TfrmTest::ListView1MouseDown(TObject *Sender,      TMouseButton Button, TShiftState Shift, int X, int Y){    TListItem *li = ListView1->GetItemAt(X, Y);    THitTests ht = ListView1->GetHitTestInfoAt(X, Y);    if (li && ht.Contains(htOnStateIcon))        li->Checked? m_SelectNum++: m_SelectNum--;    Caption = m_SelectNum;} 

热点排行