找回密码
 加入
搜索
查看: 7300|回复: 18

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

 火.. [复制链接]
发表于 2012-4-5 20:42:47 | 显示全部楼层 |阅读模式
本帖最后由 131738 于 2012-4-5 21:50 编辑

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

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×

评分

参与人数 1金钱 +15 收起 理由
afan + 15 感谢主动将修改帖子分类为[已解决],请继续 ...

查看全部评分

发表于 2012-4-5 20:51:23 | 显示全部楼层
回复 1# 131738

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

XP SP3 中文版 + AutoIt 3.3.7.15 中文汉化版
发表于 2012-4-5 20:59:00 | 显示全部楼层
我测试了 xp 是 14-20,其实前辈不必纠结于此,直接
For $q = $radio1 To $radio7
...
If $radioX = $radio1 Then
...
不是更好?
如果用数字反倒不清晰了

评分

参与人数 2贡献 +6 收起 理由
lixiaolong + 5 没想到...
user3000 + 1 对, 我下面的反而又多余了些!

查看全部评分

发表于 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

评分

参与人数 2金钱 +130 贡献 +5 收起 理由
131738 + 100 + 5 谢谢!!! 昨天受加分限制,今天补!
lixiaolong + 30

查看全部评分

发表于 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)
...
 楼主| 发表于 2012-4-5 21:08:37 | 显示全部楼层
回复  131738

前辈是不是这些代码前新添加了几个控件?
lixiaolong 发表于 2012-4-5 21:04


就是那贴 1 楼的代码,复制回来在 While 内加优化代码,其它无任何添加!
发表于 2012-4-5 21:12:16 | 显示全部楼层
回复 3# afan
我老是不能把建立的控件当成纯数字看呢!
坏习惯啊!
 楼主| 发表于 2012-4-5 21:14:01 | 显示全部楼层
我测试了 xp 是 14-20,其实前辈不必纠结于此,直接
For $q = $radio1 To $radio7
...
If $radioX = $r ...
afan 发表于 2012-4-5 20:59


我试试,当时为这个相关参数的传递问题还想了老半天。。。
 楼主| 发表于 2012-4-5 21:19:56 | 显示全部楼层
我测试了 xp 是 14-20,其实前辈不必纠结于此,直接
For $q = $radio1 To $radio7
...
If $radioX = $r ...
afan 发表于 2012-4-5 20:59


曾经写过 GUICtrlRead( $radio & $i ) , 结果没反映。。。。
 楼主| 发表于 2012-4-5 21:20:56 | 显示全部楼层
回复  131738
前辈直接用 1 到 7 吧. 如果控件ID是因编译器而异的话, 像下面代码的'适应性'好一些.
user3000 发表于 2012-4-5 21:00


谢谢代码!!!
发表于 2012-4-5 21:21:45 | 显示全部楼层
回复 3# afan

真没想到...经验多还是不一样!学习了!
发表于 2012-4-5 21:23:02 | 显示全部楼层
曾经写过 GUICtrlRead( $radio & $i ) , 结果没反映。。。。
131738 发表于 2012-4-5 21:19



    那样使用变量当然不会有反应… 要用的话应如 user3000 在 4# 的代码中的第 7 行所示~
发表于 2012-4-5 21:32:18 | 显示全部楼层
回复 8# 131738


    哈哈,和老K前辈有过同样的经历,用数字表示控件又要多加释意优化时还麻烦
发表于 2012-4-5 21:34:12 | 显示全部楼层
回复  afan
我老是不能把建立的控件当成纯数字看呢!
坏习惯啊!
user3000 发表于 2012-4-5 21:12

回复  afan

真没想到...经验多还是不一样!学习了!
lixiaolong 发表于 2012-4-5 21:21



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

该贴 http://www.autoitx.com/forum.php ... 438&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

评分

参与人数 3金钱 +28 贡献 +24 收起 理由
楼上风云 + 10 超级膜拜
lixiaolong + 28 + 5
user3000 + 9 服~!真是如此!

查看全部评分

发表于 2012-4-5 21:44:06 | 显示全部楼层
向楼上的高人们敬礼!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-9-30 15:20 , Processed in 0.114564 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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