找回密码
 加入
搜索
查看: 4328|回复: 6

[GUI管理] _GUICtrlTab_DeleteItem 删除某标签页后的错位问题

  [复制链接]
发表于 2010-9-17 13:12:40 | 显示全部楼层 |阅读模式
        下面是一个使用_GUICtrlTab_DeleteItem() 删除某标签页的例子,大家测试后会发现如下问题:
       
        _GUICtrlTab_DeleteItem 可以删除指定的标签,但它不会删除其页面的控件(函数内有说明)
        因此在使用_GUICtrlTab_DeleteItem 删除标签标签时,还需另外删除其页面的控件。
        但存在一个严重的问题,虽然指定页已删除,但其后的标签页内的控件并不会跟随其标签页也向前移一位,
        而导致标签页内的控件错位,似乎页面内的控件只认标签的0基索引。
       
        比如你删除了标签“3”,会发现原标签“3”所在的索引位空了,但由于标签“4”已向前移了一位,占领了原
        “3”的索引,结果就是显示标签“4”内的控件没了,后面的标签“5”、标签“6”同样因此错位。
       
        这样的话 _GUICtrlTab_DeleteItem 除了制造错误(删除标签页后不指定下一个标签也就算了),还有别的功能吗?很郁闷~~


#include <GuiTab.au3>

GUICreate('test')
$Tab = GUICtrlCreateTab(5, 5, 392, 360)
Dim $L[7]
For $i = 0 To 6
        GUICtrlCreateTabItem($i)
        $L[$i] = GUICtrlCreateLabel($i, 20 + $i * 48, 50)
Next
GUICtrlCreateTabItem('')
$Button1 = GUICtrlCreateButton('删除当前标签', 100, 370, 100, 22)
GUISetState()

While 1
        $msg = GUIGetMsg()
        Switch $msg
                Case -3
                        Exit
                Case $Button1
                        $i = _GUICtrlTab_GetCurSel($Tab)
                        $c = _GUICtrlTab_GetItemText($Tab, $i)
                        _GUICtrlTab_DeleteItem($Tab, $i)
                        GUICtrlDelete($L[$c])
        EndSwitch
WEnd
发表于 2010-9-17 14:09:50 | 显示全部楼层
确实很奇怪,做了个测试:不删控件,只删控件数组中控件句柄。
怪事又出现了。
#include <GuiTab.au3>
#include <array.au3>
GUICreate('test')
$Tab = GUICtrlCreateTab(5, 5, 392, 360)
Dim $L[7]
For $i = 0 To 6
        GUICtrlCreateTabItem($i)
        $L[$i] = GUICtrlCreateLabel($i, 20 + $i * 48, 50)
Next
GUICtrlCreateTabItem('')
_ArrayDisplay($L)
$Button1 = GUICtrlCreateButton('删除当前标签', 100, 370, 100, 22)
GUISetState()

While 1
        $msg = GUIGetMsg()
        Switch $msg
                Case -3
                        Exit
                Case $Button1
                        $i = _GUICtrlTab_GetCurSel($Tab)                        
                        $c = _GUICtrlTab_GetItemText($Tab, $i)
                        ;GUICtrlDelete($L[$c])
                        _ArrayDelete($L,$i)
                        _GUICtrlTab_DeleteItem($Tab, $i)

;~                 Case $Tab
;~                         MsgBox(0,_GUICtrlTab_GetCurSel($Tab),_GUICtrlTab_GetItemCount($Tab))
        EndSwitch
WEnd

评分

参与人数 1威望 +2 金钱 +50 收起 理由
afan + 2 + 50 SF+感谢测试

查看全部评分

 楼主| 发表于 2010-9-17 14:20:17 | 显示全部楼层
确实很奇怪,做了个测试:不删控件,只删控件数组中控件句柄。
怪事又出现了。
3mile 发表于 2010-9-17 14:09



    这样的话相当于一直都在删除最后一个索引内的控件,然后保持错位~~
弄不清的事情,只能很灵异的说……
 楼主| 发表于 2010-9-17 14:42:51 | 显示全部楼层
本帖最后由 afan 于 2010-9-17 16:23 编辑

回复 2# 3mile


    其实删除数组内的元素与删除控件并无关联,注释掉 GUICtrlDelete($L[$c]) 就是一样的效果~
也就是说,当前的页面控件只是单纯的绑定了索引号,而不会跟随索引的标题。这个就郁闷之极了…
 楼主| 发表于 2010-9-17 16:26:30 | 显示全部楼层
看来只能用类似浏览器的方式解决了,只用标签头,其它的页面均另外创建,根据 Tab 的索引文字或应用程序数据来判断相关页面控件的显示/隐藏。

貌似大家都不关心此问题哦,没关系,看看了解下就好,以后碰到此问题不至于迷惑 ~
发表于 2010-9-17 16:47:02 | 显示全部楼层
This does not delete the controls on the tabitems
 楼主| 发表于 2010-9-17 18:23:11 | 显示全部楼层
This does not delete the controls on the tabitems
liufenglg 发表于 2010-9-17 16:47



    这就是我在一楼所说的“(函数内有说明)”
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-6-1 17:49 , Processed in 0.079223 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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