131738 发表于 2012-4-5 20:42:47

[已解决]看看控件 ID 的怪现象!

本帖最后由 131738 于 2012-4-5 21:50 编辑

要知原因,看 14 楼 afan 的精辟分析!

在 http://www.autoitx.com/forum.php?mod=viewthread&tid=31438&fromuid=161
发的个小工具, 脚本中的一组控件ID,我发布时是 18 到 24 ,
但多人反馈脚本中的这组控件 ID 应该是 14 到 20,
我改回 14 到 20 准备优化这个脚本时出错,
再测试这组控件 ID, 确实在我的机器上是 18 到 24,见下图,这是什么原因?

user3000 发表于 2012-4-5 20:51:23

回复 1# 131738

跟WIN系统和 AutoIt版本有关系吗?
我直接无论是直接运行代码或编译后的EXE都是14到20

XP SP3 中文版 + AutoIt 3.3.7.15 中文汉化版

afan 发表于 2012-4-5 20:59:00

我测试了 xp 是 14-20,其实前辈不必纠结于此,直接
For $q = $radio1 To $radio7
...
If $radioX = $radio1 Then
...
不是更好?
如果用数字反倒不清晰了

user3000 发表于 2012-4-5 21:00:23

回复 1# 131738
前辈直接用 1 到 7 吧. 如果控件ID是因编译器而异的话, 像下面代码的'适应性'好一些.                Case $Compare_Replace
                        $Path_0 = GUICtrlRead($01)
                        $Key = GUICtrlRead($02)
                        $displace = GUICtrlRead($03)
                        $New_File = GUICtrlRead($04)
                        For $q = 1 To 7
                                If GUICtrlRead(Eval('radio' & $q)) = $GUI_CHECKED Then
                                        $radioX = $q
                                        ExitLoop
                                EndIf
                        Next
                        If $radioX = 1 Then
                                _FileSRER2Line($Path_0, $Key, $displace);正则替换整行为 '关键\字'的行
                                _return(@extended)
                        ElseIf $radioX = 2 Then
                                _FileSRER2Line($Path_0, $Key, 0, 0) ;关闭正则,将文件中的所有包含'关键\字'的行替换为'AB\C'
                                _return(@extended)
                        ElseIf $radioX = 3 Then
                                _FileSRER2Line($Path_0, $Key) ;删除文件中整行为'关键字'的所有行
                                _return(@extended)
                        ElseIf $radioX = 4 Then
                                _FileSRER2Line($Path_0, $Key, '', 0) ;删除文件中的所有包含'关键字'的行
                                _return(@extended)
                        ElseIf $radioX = 5 Then
                                _FileSRER2Line($Path_0, $Key, '', 1, 1, 1, $New_File) ;删除文件中的所有整行为'关键字'的行,写入到新 .txt 文件
                                _return(@extended)
                        ElseIf $radioX = 6 Then
                                _FileSRER2Line($Path_0, $Key, '', 0, 1, 1, 0) ;删除文件中的所有包含'关键字'的行,仅返回不写入源文件或新文件
                                _return(@extended)
                        ElseIf $radioX = 7 Then
                                _FileSRER2Line($Path_0) ;删除文件中的所有空行
                                _return(@extended)
                        EndIf

lixiaolong 发表于 2012-4-5 21:04:10

回复 1# 131738

前辈是不是这些代码前新添加了几个控件?
$radio1 = GUICtrlCreateRadio(" 正则表达式替换.", 20, 58, 160, 16)
$radio2 = GUICtrlCreateRadio(" 关闭正则表达式,直接替换.", 20, 75, 170, 16)
$radio3 = GUICtrlCreateRadio(" 删除整行为'关键字符'的所有行.", 20, 100, 200, 17)
...

131738 发表于 2012-4-5 21:08:37

回复131738

前辈是不是这些代码前新添加了几个控件?
lixiaolong 发表于 2012-4-5 21:04 http://www.autoitx.com/images/common/back.gif

就是那贴 1 楼的代码,复制回来在 While 内加优化代码,其它无任何添加!

user3000 发表于 2012-4-5 21:12:16

回复 3# afan
我老是不能把建立的控件当成纯数字看呢!
坏习惯啊!

131738 发表于 2012-4-5 21:14:01

我测试了 xp 是 14-20,其实前辈不必纠结于此,直接
For $q = $radio1 To $radio7
...
If $radioX = $r ...
afan 发表于 2012-4-5 20:59 http://www.autoitx.com/images/common/back.gif

我试试,当时为这个相关参数的传递问题还想了老半天。。。

131738 发表于 2012-4-5 21:19:56

我测试了 xp 是 14-20,其实前辈不必纠结于此,直接
For $q = $radio1 To $radio7
...
If $radioX = $r ...
afan 发表于 2012-4-5 20:59 http://www.autoitx.com/images/common/back.gif

曾经写过 GUICtrlRead( $radio & $i ) , 结果没反映。。。。

131738 发表于 2012-4-5 21:20:56

回复131738
前辈直接用 1 到 7 吧. 如果控件ID是因编译器而异的话, 像下面代码的'适应性'好一些.
user3000 发表于 2012-4-5 21:00 http://www.autoitx.com/images/common/back.gif

谢谢代码!!!

lixiaolong 发表于 2012-4-5 21:21:45

回复 3# afan

真没想到...经验多还是不一样!学习了!

afan 发表于 2012-4-5 21:23:02

曾经写过 GUICtrlRead( $radio & $i ) , 结果没反映。。。。
131738 发表于 2012-4-5 21:19 http://www.autoitx.com/images/common/back.gif


    那样使用变量当然不会有反应… 要用的话应如 user3000 在 4# 的代码中的第 7 行所示~

502762378 发表于 2012-4-5 21:32:18

回复 8# 131738


    哈哈,和老K前辈有过同样的经历,用数字表示控件又要多加释意优化时还麻烦

afan 发表于 2012-4-5 21:34:12

回复afan
我老是不能把建立的控件当成纯数字看呢!
坏习惯啊!
user3000 发表于 2012-4-5 21:12 http://www.autoitx.com/images/common/back.gif

回复afan

真没想到...经验多还是不一样!学习了!
lixiaolong 发表于 2012-4-5 21:21 http://www.autoitx.com/images/common/back.gif


    有时候难免惯性思维占主导,呵呵~
提醒大家一定要注意一点,也是解开楼主的问题关键,在直接使用ID标识符时,一定要保证控件创建成功。 如下的代码就会造成连锁错误

该贴 http://www.autoitx.com/forum.php?mod=viewthread&tid=31438&fromuid=161 33-37行
Local $Pic0 = @ScriptDir & "\gradient_1024x24.jpg"
$Pic1 = GUICtrlCreatePic($Pic0, 0, 0, 613, 5)
$Pic2 = GUICtrlCreatePic($Pic0, 0, 5, 5, 205)
$Pic3 = GUICtrlCreatePic($Pic0, 0, 205, 633, 5)
$Pic4 = GUICtrlCreatePic($Pic0, 628, 15, 5, 205)

这4个控件应该只有楼主成功创建,因为 gradient_1024x24.jpg 存在,因此其后创建的控件会多出4个,即14+4=18、20+4=24,也就是 18-24。而我们均会创建失败,因此只会是 14-20

xms77 发表于 2012-4-5 21:44:06

向楼上的高人们敬礼!
页: [1] 2
查看完整版本: [已解决]看看控件 ID 的怪现象!