以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助] 有条件的执行指令,怎么变成了无条件的无限执行了呢?  (http://www.foxtable.com/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楼 的用法,和下面的这个用法一样啊:

图片点击可在新窗口打开查看此主题相关图片如下:窗口中的表(2).png
图片点击可在新窗口打开查看