找回密码
 加入
搜索
查看: 2916|回复: 7

[AU3基础] 多个 LISTVIEW 在一个大循环里面 为何会 LISTVIEW的句柄会判断错误??

  [复制链接]
发表于 2012-11-17 13:09:07 | 显示全部楼层 |阅读模式
本帖最后由 kk_lee69 于 2012-11-18 01:17 编辑

多个 LISTVIEW 在一个大循环里面 为何会 LISTVIEW的句柄会判断错误??

希望高手幫忙解惑一下!!  多个 LISTVIEW 在一个大循环里面 为何会 LISTVIEW的句柄会判断错误??

我的 程式有四千多行  我濃縮了一下  弄了個主架構.........

簡單的說是 一個大循環 裡面有多個 LISTVIEW  利用 GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
去做單擊事件的判斷.........然後做動作.......

LISTVIEW1 跟 LISTVIEW2 都是 在主GUI裡面 程式一執行就存在.......其他的LISTVIEW 都是有需要再呼叫出來使用 不要在刪除...
當我 呼叫出 LISTVIEW3 之後 退出 再重新呼叫 LISTVIEW7 的時候 單擊事件 就會發生錯誤  會被判斷為 LISTVIEW3 的單擊事件

而產生下面的錯誤
IF $STarray3[17]="" Then
IF ^ ERROR

求高手解惑一下  謝謝!!


補充描述  :

我大概抓到原因了~~~ 是 邏輯上的問題......所以求助 高手 請教如何解決這種問題......

因為我的程式  是一個大循環  有個主要的 GUI  按下某個按鈕.....會呼叫 子GUI.....當 子GUI 退出後 當然就回到主要的GUI 畫面...
每個 GUI 都有 LISTVIEW.....而我用 GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")  判斷 LISTVIEW 做按鈕的 DISABLE 或者 ENABLE

第一個  子 GUI 的 LISTVIEW 名稱叫做 $LISTVIEW3  ==>呼叫後 $LISTVIEW3   這個變數會變成 53

第二個  子 GUI 的  LISTVIEW 名稱叫做 $LISTVIEW7  ==>呼叫後 $LISTVIEW7   這個變數剛好被分配的也是 53

而 GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")   的判斷 裡面是   CASE $hWndFrom = GuiCtrlGetHandle($ListView3)  排在 CASE $hWndFrom = GuiCtrlGetHandle($ListView7) 的前面

所以當我進入到 第二個 子GUI  點擊到  LISTVIEW7 的時候 .........由於 $LISTVIEW3 =53  而 $LISTVIEW7 也是 53

所以  CASE $hWndFrom = GuiCtrlGetHandle($ListView3)  跟 CASE $hWndFrom = GuiCtrlGetHandle($ListView7)   都會變成 CASE $hWndFrom = GuiCtrlGetHandle(   53    )

所以程式就先跑第一個    CASE $hWndFrom = GuiCtrlGetHandle($ListView3)  就符合了...... 但是 事實上 第一個  子 GUI 的 LISTVIEW3  早就被我GUIDEL 掉了.....

所以 底下的程式就會出錯誤了.............這樣說 不知道是否能夠表達問題的癥結點??
发表于 2012-11-17 14:17:45 | 显示全部楼层
本帖最后由 netegg 于 2012-11-17 14:19 编辑

哪有你这样的,要先切句柄,再切操作
系统消息之所以有些麻烦,就是同样的操作,在不同句柄下都要重写一遍
发表于 2012-11-17 17:32:29 | 显示全部楼层
我试了下,不能运行楼主给你的代码,就不继续看下去了。因为不能速度直接地重现楼主所描绘的问题。那么多行代码,太浪费时间了…………
发表于 2012-11-17 22:55:13 | 显示全部楼层
我试了下,不能运行楼主给你的代码,就不继续看下去了。因为不能速度直接地重现楼主所描绘的问题。那么多行 ...
happytc 发表于 2012-11-17 17:32



    确实应该提醒LZ,测试代码应该简洁且可直接运行,这样才能直观问题,才值得别人帮忙。再长的代码要突出问题可能也就几十行。要像帮助文档的示例一样。
 楼主| 发表于 2012-11-18 01:17:57 | 显示全部楼层
回复 2# netegg

補充描述  :

我大概抓到原因了~~~ 是 邏輯上的問題......所以求助 高手 請教如何解決這種問題......

因為我的程式  是一個大循環  有個主要的 GUI  按下某個按鈕.....會呼叫 子GUI.....當 子GUI 退出後 當然就回到主要的GUI 畫面...
每個 GUI 都有 LISTVIEW.....而我用 GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")  判斷 LISTVIEW 做按鈕的 DISABLE 或者 ENABLE

第一個  子 GUI 的 LISTVIEW 名稱叫做 $LISTVIEW3  ==>呼叫後 $LISTVIEW3   這個變數會變成 53

第二個  子 GUI 的  LISTVIEW 名稱叫做 $LISTVIEW7  ==>呼叫後 $LISTVIEW7   這個變數剛好被分配的也是 53

而 GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")   的判斷 裡面是   CASE $hWndFrom = GuiCtrlGetHandle($ListView3)  排在 CASE $hWndFrom = GuiCtrlGetHandle($ListView7) 的前面

所以當我進入到 第二個 子GUI  點擊到  LISTVIEW7 的時候 .........由於 $LISTVIEW3 =53  而 $LISTVIEW7 也是 53

所以  CASE $hWndFrom = GuiCtrlGetHandle($ListView3)  跟 CASE $hWndFrom = GuiCtrlGetHandle($ListView7)   都會變成 CASE $hWndFrom = GuiCtrlGetHandle(   53    )

所以程式就先跑第一個    CASE $hWndFrom = GuiCtrlGetHandle($ListView3)  就符合了...... 但是 事實上 第一個  子 GUI 的 LISTVIEW3  早就被我GUIDEL 掉了.....

所以 底下的程式就會出錯誤了.............這樣說 不知道是否能夠表達問題的癥結點??
 楼主| 发表于 2012-11-18 01:18:35 | 显示全部楼层
回复 4# afan

同上 補充 請老大 幫我看看
 楼主| 发表于 2012-11-18 01:19:26 | 显示全部楼层
回复 3# happytc

找到問題點  有補充說明....請幫我看一下  看看以後我的程式 該怎麼改 比較不會出現這樣的問題
发表于 2012-11-18 11:42:29 | 显示全部楼层
回复 5# kk_lee69

解释的必要不大,你看看我那个sysopti的代码里切换界面的部分应该类似你这个操作
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-26 13:49 , Processed in 0.142463 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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