以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助] 有条件的执行指令,怎么变成了无条件的无限执行了呢? (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=141685) |
-- 作者:龙潭春早 -- 发布时间:2019/10/8 16:54:00 -- [求助] 有条件的执行指令,怎么变成了无条件的无限执行了呢? 用 CheckBox 和 CheckedListBox,设计了一个产品产地的选择窗口。 在选择的时候,需要清空之前选的地址。 所以,在 MouseDown事件中,添加了下面这段代码。 代码中根据判断,只是清空 CheckBox 和 CheckedListBox 的勾选。 但是,现在点击窗口中的控件 Panel 和 Button,也都清空了 CheckBox 和 CheckedListBox 的勾选! 为什么呢? 怎么解决呢? If e.Form.text = "产品产地" Then For Each ctr As Object In e.Form.Controls \' 遍历 + 清空 If Typeof ctr Is WinForm.CheckedListBox Then Dim ckL As WinForm.CheckedListBox = ctr ckL.Value = "" \' 清空 所有 CheckedListBox 中的 所有 勾选 ElseIf Typeof ctr Is WinForm.CheckBox Then Dim ck As WinForm.CheckBox = ctr ck.Checked = False \' 清空 所有 CheckBox 中的 所有 勾选 ElseIf Typeof ctr Is WinForm.Panel Then ElseIf Typeof ctr Is WinForm.Button Then End If Next End If |
-- 作者:有点蓝 -- 发布时间:2019/10/8 17:15:00 -- 什么地方的MouseDown事件?窗口全局事件?如果是全局事件,肯定是点击任何一个控件都会触发的 |
-- 作者:龙潭春早 -- 发布时间:2019/10/8 18:07:00 -- 嗯 是窗口的全局事件。 虽然在窗口点击任何一个控件,都会触发窗口的全局事件, 但是,按照 1楼 条件的设定,点击 Panel 和 Button 按钮, 应该不会导致 CheckBox 和 CheckedListBox 被清空吧? 应该怎么调整好呢?
|
-- 作者:有点蓝 -- 发布时间:2019/10/8 20:28:00 -- 1楼的条件并不是判断是否点击了Panel 和 Button 按钮好不好,只是判断窗口里有没有Panel 和 Button 按钮。 If Typeof e.sender Is WinForm.Panel orelse Typeof e.sender Is WinForm.Button Then return For Each ctr As Object In e.Form.Controls \' 遍历 + 清空 If Typeof ctr Is WinForm.CheckedListBox Then Dim ckL As WinForm.CheckedListBox = ctr ckL.Value = "" \' 清空 所有 CheckedListBox 中的 所有 勾选 ElseIf Typeof ctr Is WinForm.CheckBox Then Dim ck As WinForm.CheckBox = ctr ck.Checked = False \' 清空 所有 CheckBox 中的 所有 勾选 End If Next |
-- 作者:龙潭春早 -- 发布时间:2019/10/9 0:10:00 -- 多谢! 明天测试一下。
|
-- 作者:龙潭春早 -- 发布时间:2019/10/18 15:25:00 -- 问题解决了。 不过,1楼中的下述代码,红色字体部分判断了如果是 Panel 和 Button 按钮, 就不做任何处理(也就是说,没有给它们设置清空控件中勾选的动作)。 if … then 的这一用法,之前在论坛中专门请教过蓝老师。 (见:“[讨论] 在线开发指南中的一个问题: 代码好像不全? Post By:2019/8/7 20:50:00” 网址:http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=139191&authorid=0&page=0&star=1) 那么,这一用法,用在这里怎么就不行了呢? If e.Form.text = "产品产地" Then For Each ctr As Object In e.Form.Controls \' 遍历 + 清空 If Typeof ctr Is WinForm.CheckedListBox Then Dim ckL As WinForm.CheckedListBox = ctr ckL.Value = "" \' 清空 所有 CheckedListBox 中的 所有 勾选 ElseIf Typeof ctr Is WinForm.CheckBox Then Dim ck As WinForm.CheckBox = ctr ck.Checked = False \' 清空 所有 CheckBox 中的 所有 勾选 ElseIf Typeof ctr Is WinForm.Panel Then ElseIf Typeof ctr Is WinForm.Button Then End If Next End If |
-- 作者:有点蓝 -- 发布时间:2019/10/18 15:50:00 -- 请看4楼。这个锅if … then不背 |
-- 作者:龙潭春早 -- 发布时间:2019/10/18 17:23:00 -- 嗯 知道 4楼 的用法是对的,也是用这个代码解决了问题。 但是,蓝老师,6楼 的问题能给解释一下吗?
|
-- 作者:有点蓝 -- 发布时间:2019/10/18 17:35:00 -- 不是让给您看4楼的代码,是看说明 1楼的条件并不是判断是否点击了Panel 和 Button 按钮好不好,只是判断窗口里有没有Panel 和 Button 按钮。
|
-- 作者:龙潭春早 -- 发布时间:2019/10/18 18:44:00 -- 蓝老师,感觉 1楼 的用法,和下面的这个用法一样啊: |