treeview控件状态更新的问题 现在有一个比较奇怪的问题,我在form_load里进行的treeview的初始化然后在form_resize里把treeview的item全部选中,实际上也确实全部选中了但是checkbox看上去就好像一个也没被选中一样,这是为什么,我已经把treeview全部refresh了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我专门试了一下,没什么问题,可能你是不是别的什么地方哪儿弄错了:不过,你可临时放个按钮,在按钮里在单独做个全选试一下,看看是什么效果!下面的代码是,我测试时写的,可供您参考一下:Private Sub Command1_Click() Dim i As Integer For i = 1 To TreeView1.Nodes.Count TreeView1.Nodes(i).Checked = False NextEnd SubPrivate Sub Form_Load() Dim i As Integer For i = 1 To 20 TreeView1.Nodes.Add , 1, Trim(Str(i)) & "_", Trim(Str(i)) Next End SubPrivate Sub Form_Resize() Dim i As Integer For i = 1 To TreeView1.Nodes.Count TreeView1.Nodes(i).Checked = True NextEnd Sub 哦,没有哪里弄错,这些功能都是好的,我的全选/全不选按钮,在刚刚load好,虽然看上去所有的checkbox都是没有选中状态,但是实际上是选中状态,我已经测试过,没有问题,就是看不见 这个resize方法我不是这么写的,我要做判断,因为resize似乎是窗口大小发生改变的时候就会调用,所以这样会导致每次窗口改变大小都会全选,这会变成bug的,所以我这里做了一个判断,是否进行过resize,就加了个判断就看不到了,我如果把这个判断去掉,就可以看到所有checkbox被选择了,很奇怪,但是这只是视觉上的差别,因为我step进去,所有的结果都是正确的,不管能否看得到checkbox被选中 有,我把代码贴出来吧,呵呵,麻烦各位帮我看看哪里不对,因为功能其实挺简单的就是在第一次resize的时候把treeview全选并且在选择信息窗口里现实全选字样而已Private Sub Form_Resize() If isResized Then GoTo line1 End If For i = 1 To tvReportFilter.Nodes.count tvReportFilter.Nodes(i).Checked = True tvReportFilter.Refresh Next i tvReportFilter.Refresh Form.Refresh isAllSelect = True isResized = Trueline1: If isAllSelect Then txtSBF.Value = "SBF filtered as: All!!" txtRegion.Value = "Region filtered as: All!!" isValidFilter = True End IfEnd Sub 我前面说过:你新建一个工程,新拖过来一个TREEVIEW,再拖个COMMANDBUTTON,FORM_LOAD 里随便加载几个TREEVIEW中的NODE子项;把全选代码写在COMMANDBUTTON的CLICK事件里,试一下!1、如果,按钮的CLICK事件里的代码执行后,也是同样的效果,说明你的TREEVIEW控件本身有问题!2、如果,按钮的CLICK事件里的代码执行后,一点问题没有,说明还是你的代码不知道哪里有问题! 呵呵,我想任何treeview有一个全选\全不选按钮很正常,我前面可能表达有问题,没说清楚,这个按钮怎么可能在事件里呢,是另外的功能,但是对item全选的代码是相同的,但是按钮的performance完全没问题,而用resize初始化的时候就有问题至于我为什么放在resize里是因为我放在formload里根本没办法更新状态,至于放在什么事件里我觉得没什么问题吧,反正最好是在formload之后的事件响应里来做会好一些,要不可能因为formload没有完全把form构造完毕会造成更新的checked状态上不去,之前有高人告诉我用on_activate,我用了觉得不是很好如果蓝海你有什么建议,可以直接告诉我,譬如这段代码放在什么事件里响应更好我是新手这没错,高手会在这里问这种初级的问题吗,作为高手的您,希望可以回帖有一些建设性再重申下,我的全选和全不选功能完全没有问题,要不我何必还在困惑,呵呵 呵呵,如果我不这么判断,那么每次窗口调整大小都会全选一次,您作为用户会觉得这个很OK?我只是为了更新状态罢了,只要是放在formload之后的事件里都可以,不一定非要resize所以我当然是全选在进入form以后只做一次了,这个有什么问题吗 lz try这个加个timer控件,这段代码放在timer事件里,窗体加载时设置timer,触发时做这个 98API写入注册表问题 如何知道自己计算机的Cpu是64位的还是32位的 关于Access加密码的问题!! datareport上的控件可不可以不作的象栅格那么大, Move方法为什么定位不准? 如何拦截系统消息 求SQL语句(提供思路也可以) 有没有用OLE对像做的例子啊 在VB里用showcursor这个API用得很好,可是在生成的应用程序里就是隐藏不了,吐血!!请高手指教! 请教API函数RectInRegion的用法,最好有代码 请问JS与ActiveX通信的问题,在线等! MSFlexGrid 控件当设置列宽=0,为什么这个列还显示一点点字符出来啊?
Dim i As Integer
For i = 1 To TreeView1.Nodes.Count
TreeView1.Nodes(i).Checked = False
Next
End SubPrivate Sub Form_Load()
Dim i As Integer
For i = 1 To 20
TreeView1.Nodes.Add , 1, Trim(Str(i)) & "_", Trim(Str(i))
Next
End SubPrivate Sub Form_Resize()
Dim i As Integer
For i = 1 To TreeView1.Nodes.Count
TreeView1.Nodes(i).Checked = True
Next
End Sub
这个resize方法我不是这么写的,我要做判断,因为resize似乎是窗口大小发生改变的时候就会调用,所以这样会导致每次窗口改变大小都会全选,这会变成bug的,所以我这里做了一个判断,是否进行过resize,就加了个判断就看不到了,我如果把这个判断去掉,就可以看到所有checkbox被选择了,很奇怪,但是这只是视觉上的差别,因为我step进去,所有的结果都是正确的,不管能否看得到checkbox被选中
Private Sub Form_Resize()
If isResized Then
GoTo line1
End If
For i = 1 To tvReportFilter.Nodes.count
tvReportFilter.Nodes(i).Checked = True
tvReportFilter.Refresh
Next i tvReportFilter.Refresh
Form.Refresh
isAllSelect = True
isResized = True
line1:
If isAllSelect Then
txtSBF.Value = "SBF filtered as: All!!"
txtRegion.Value = "Region filtered as: All!!"
isValidFilter = True
End If
End Sub
呵呵,如果我不这么判断,那么每次窗口调整大小都会全选一次,您作为用户会觉得这个很OK?我只是为了更新状态罢了,只要是放在formload之后的事件里都可以,不一定非要resize所以我当然是全选在进入form以后只做一次了,这个有什么问题吗