aardio 官方社区

用户名  找回密码
 注册会员

QQ登录

只需一步,快速开始

帖子
查看: 13891|回复: 5

请教ListView中的Check选中与取消问题

[复制链接]

16

主题

117

回帖

914

积分

三级会员

积分
914
发表于 2013-2-5 12:58:02 | 显示全部楼层 |阅读模式
本帖最后由 vbvfp 于 2013-2-5 12:59 编辑

我想实现一个Listview控件中第一列添加check控件,单击某一行如果check已选定那么就取消,如果未选定那么就选定它,我试了几次,未成功,不知如何添加判断和响应,搜索论坛,只有二个winform.listview.getChecked,winform.listview.setChecked,不太会用,请高手赐教,谢了先
我的代码如下:
  1. import win.ui;

  2. /*DSG{{*/
  3. var winform = ..win.form( bottom=249;parent=...;text="aardio Form";right=349 )
  4. winform.add(
  5. listview={ dr=1;dl=1;bgcolor=16777215;right=303;asel=false;cls="listview";fullRow=1;bottom=207;top=36;font=LOGFONT( name='SimSun' );msel=false;z=1;gridLines=1;edge=1;left=37 };
  6. static={ bottom=28;text="请使用鼠标左键、鼠标右键点击列表项";left=37;top=10;transparent=1;z=2;right=310;cls="static" }
  7. )
  8. /*}}*/
  9. winform.listview.onnotify = function(id,code,ptr){
  10.    
  11.     select(code) {
  12.             case  0xFFFFFF9B/*_LVN_ITEMCHANGED*/ {
  13.                     var nm = winform.listview.getNotifyMessage(code,ptr)
  14.                     if(winform.listview.selIndex){
  15.                         //if winform.listview.getChecked(nm.iItem) {winform.listview.setChecked(nm.iTtem,false)};
  16.                         winform.listview.setChecked(nm.iItem);
  17.                             winform.static.text = "选中了" +  winform.listview.getItemText(nm.iItem,nm.iSubItem+1)
  18.                                }
  19.             }
  20.     }
  21. }
  22. //自适应列宽度
  23. winform.listview.adjust = function(cx,cy){
  24.     winform.listview.fillParent(/*列序号*/);
  25. }
  26. winform.listview.insertColumn("选择",43,,0x2/*_LVCFMT_CENTER*/)
  27. winform.listview.insertColumn("列标题2",100,,0x0/*_LVCFMT_LEFT*/)
  28. winform.listview.insertColumn("列标题1",100,,0x2/*_LVCFMT_CENTER*/)
  29. winform.listview.setExtended(0x4/*_LVS_EX_CHECKBOXES*/);
  30. winform.listview.addItem( {
  31.         text={"";"第一行内容";"yes"}
  32. } )
  33. winform.listview.addItem("")
  34. winform.listview.addItem( {
  35.         text={"";"第三行内容";"OK3"}
  36. } )
  37. winform.listview.setItemText( {
  38.         "";"第二行内容";"第二列"
  39. },2);

  40. winform.show();
  41. win.loopMessage();
复制代码

4

主题

852

回帖

4689

积分

荣誉会员

积分
4689
发表于 2013-2-5 13:38:23 | 显示全部楼层
你自己都把答案写出来了,
其实范例里也写的很清楚了,答案其实很简单:

winform.listview.onnotify = function(id,code,ptr){  
   
select(code) {
        
case 0xFFFFFFFE/*_NM_CLICK*/{
            
var nm = winform.listview.getNotifyMessage(code,ptr)  
            
if( ! nm.iItem  ) return ;  
            winform.listview.setChecked(nm.iItem,!winform.listview.getChecked(nm.iItem) )
        }
    }
}

不是找不到,是你把简单的事搞复杂了

4

主题

852

回帖

4689

积分

荣誉会员

积分
4689
发表于 2013-2-5 13:47:57 | 显示全部楼层
http://update.aardio.com/search?q=setChecked
其实不是找不到,关键没有用心去找,方法不对。

你改变勾选就触发了 LVN_ITEMCHANGED,你在这里面又去改变勾选,这不是自相矛盾么?
http://update.aardio.com/search?q=LVN_ITEMCHANGED
这个也不会找不到的。

补充下完整代码:
  1. import win.ui;
  2. /*DSG{{*/
  3. var winform = ..win.form( bottom=249;parent=...;text="aardio Form";right=349 )
  4. winform.add(
  5. listview={ dr=1;dl=1;bgcolor=16777215;right=303;asel=false;cls="listview";fullRow=1;bottom=207;top=36;font=LOGFONT( name='SimSun' );msel=false;z=1;gridLines=1;edge=1;left=37 };
  6. static={ bottom=28;text="请使用鼠标左键、鼠标右键点击列表项";left=37;top=10;transparent=1;z=2;right=310;cls="static" }
  7. )
  8. /*}}*/

  9. winform.listview.onnotify = function(id,code,ptr){  
  10.     select(code) {
  11.         case 0xFFFFFFFE/*_NM_CLICK*/{
  12.             var nm = winform.listview.getNotifyMessage(code,ptr)  
  13.             if( ! nm.iItem  ) return ;  
  14.             winform.listview.setChecked(nm.iItem,!winform.listview.getChecked(nm.iItem) )
  15.         }
  16.     }
  17. }

  18. //自适应列宽度
  19. winform.listview.adjust = function(cx,cy){
  20.     winform.listview.fillParent(/*列序号*/);
  21. }
  22. winform.listview.insertColumn("选择",43,,0x2/*_LVCFMT_CENTER*/)
  23. winform.listview.insertColumn("列标题2",100,,0x0/*_LVCFMT_LEFT*/)
  24. winform.listview.insertColumn("列标题1",100,,0x2/*_LVCFMT_CENTER*/)
  25. winform.listview.setExtended(0x4/*_LVS_EX_CHECKBOXES*/);
  26. winform.listview.addItem( {
  27.         text={"";"第一行内容";"yes"}
  28. } )
  29. winform.listview.addItem("")
  30. winform.listview.addItem( {
  31.         text={"";"第三行内容";"OK3"}
  32. } )
  33. winform.listview.setItemText( {
  34.         "";"第二行内容";"第二列"
  35. },2);

  36. winform.show();
  37. win.loopMessage();
复制代码

16

主题

117

回帖

914

积分

三级会员

积分
914
 楼主| 发表于 2013-2-5 18:30:25 | 显示全部楼层
非常谢谢!

16

主题

117

回帖

914

积分

三级会员

积分
914
 楼主| 发表于 2013-2-5 19:43:38 | 显示全部楼层
根据不争的指教,又添加了全部勾选和全部取消功能,代码如下:
  1. import win.ui;
  2. /*DSG{{*/
  3. var winform = ..win.form( text="aardio Form";bottom=266;parent=...;right=349 )
  4. winform.add(
  5. button={ bottom=244;text="全部勾选";left=133;top=213;z=3;right=208;cls="button" };
  6. static={ bottom=29;right=303;left=68;top=11;z=2;transparent=1;text="请使用鼠标左键、鼠标右键点击列表项";cls="static" };
  7. listview={ dr=1;dl=1;bgcolor=16777215;right=303;asel=false;cls="listview";fullRow=1;bottom=207;top=36;font=LOGFONT( name='SimSun' );msel=false;z=1;gridLines=1;edge=1;left=37 }
  8. )
  9. /*}}*/
  10. winform.button.oncommand = function(id,event){
  11.         if winform.button.text="全部勾选" {
  12.             winform.button.text="全部取消"
  13.             for (i=1;winform.listview.count;1) {
  14.                 winform.listview.setChecked(i)
  15.             }
  16.         }else{
  17.             winform.button.text="全部勾选"
  18.             for (i=1;winform.listview.count;1) {
  19.                 winform.listview.setChecked(i,false)
  20.             }
  21.         }
  22. }
  23. winform.listview.onnotify = function(id,code,ptr){  
  24.     select(code) {
  25.         case 0xFFFFFFFE/*_NM_CLICK*/{
  26.             var nm = winform.listview.getNotifyMessage(code,ptr)  
  27.             if( ! nm.iItem  ) return ;  
  28.             winform.listview.setChecked(nm.iItem,!winform.listview.getChecked(nm.iItem) )
  29.         }
  30.     }
  31. }
  32. //自适应列宽度
  33. winform.listview.adjust = function(cx,cy){
  34.     winform.listview.fillParent(/*列序号*/);
  35. }
  36. winform.listview.insertColumn("姓  名",80,,0x2/*_LVCFMT_CENTER*/)
  37. winform.listview.insertColumn("电话号码",300,,0x2/*_LVCFMT_CENTER*/)
  38. winform.listview.setExtended(0x4/*_LVS_EX_CHECKBOXES*/);
  39. winform.listview.addItem( {
  40.         text={"王永工";"13176768888"}
  41. } )
  42. winform.listview.addItem("")
  43. winform.listview.addItem( {
  44.         text={"冯有祥";"第三行内容"}
  45. } )
  46. winform.listview.setItemText( {
  47.         "刘光明";"第二行内容"
  48. },2);
  49. winform.show();
  50. win.loopMessage();
复制代码

12

主题

38

回帖

369

积分

新手入门

积分
369
发表于 2017-2-19 11:07:13 | 显示全部楼层
很好
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|aardio.com|aardio 官方社区 ( 皖ICP备09012014号 )

GMT+8, 2025-6-6 16:13 , Processed in 0.076122 second(s), 25 queries .

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表