kk_lee69 发表于 2012-11-17 13:09:07

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

本帖最后由 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="" 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 掉了.....

所以 底下的程式就會出錯誤了.............這樣說 不知道是否能夠表達問題的癥結點??

netegg 发表于 2012-11-17 14:17:45

本帖最后由 netegg 于 2012-11-17 14:19 编辑

哪有你这样的,要先切句柄,再切操作
系统消息之所以有些麻烦,就是同样的操作,在不同句柄下都要重写一遍

happytc 发表于 2012-11-17 17:32:29

我试了下,不能运行楼主给你的代码,就不继续看下去了。因为不能速度直接地重现楼主所描绘的问题。那么多行代码,太浪费时间了…………

afan 发表于 2012-11-17 22:55:13

我试了下,不能运行楼主给你的代码,就不继续看下去了。因为不能速度直接地重现楼主所描绘的问题。那么多行 ...
happytc 发表于 2012-11-17 17:32 http://www.autoitx.com/images/common/back.gif


    确实应该提醒LZ,测试代码应该简洁且可直接运行,这样才能直观问题,才值得别人帮忙。再长的代码要突出问题可能也就几十行。要像帮助文档的示例一样。

kk_lee69 发表于 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 掉了.....

所以 底下的程式就會出錯誤了.............這樣說 不知道是否能夠表達問題的癥結點??

kk_lee69 发表于 2012-11-18 01:18:35

回复 4# afan

同上 補充 請老大 幫我看看

kk_lee69 发表于 2012-11-18 01:19:26

回复 3# happytc

找到問題點有補充說明....請幫我看一下看看以後我的程式 該怎麼改 比較不會出現這樣的問題

netegg 发表于 2012-11-18 11:42:29

回复 5# kk_lee69

解释的必要不大,你看看我那个sysopti的代码里切换界面的部分应该类似你这个操作
页: [1]
查看完整版本: 多个 LISTVIEW 在一个大循环里面 为何会 LISTVIEW的句柄会判断错误??