_GUICtrlTab_DeleteItem 删除某标签页后的错位问题
下面是一个使用_GUICtrlTab_DeleteItem() 删除某标签页的例子,大家测试后会发现如下问题:_GUICtrlTab_DeleteItem 可以删除指定的标签,但它不会删除其页面的控件(函数内有说明)
因此在使用_GUICtrlTab_DeleteItem 删除标签标签时,还需另外删除其页面的控件。
但存在一个严重的问题,虽然指定页已删除,但其后的标签页内的控件并不会跟随其标签页也向前移一位,
而导致标签页内的控件错位,似乎页面内的控件只认标签的0基索引。
比如你删除了标签“3”,会发现原标签“3”所在的索引位空了,但由于标签“4”已向前移了一位,占领了原
“3”的索引,结果就是显示标签“4”内的控件没了,后面的标签“5”、标签“6”同样因此错位。
这样的话 _GUICtrlTab_DeleteItem 除了制造错误(删除标签页后不指定下一个标签也就算了),还有别的功能吗?很郁闷~~ {:face (254):}
#include <GuiTab.au3>
GUICreate('test')
$Tab = GUICtrlCreateTab(5, 5, 392, 360)
Dim $L
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 确实很奇怪,做了个测试:不删控件,只删控件数组中控件句柄。
怪事又出现了。
#include <GuiTab.au3>
#include <array.au3>
GUICreate('test')
$Tab = GUICtrlCreateTab(5, 5, 392, 360)
Dim $L
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 确实很奇怪,做了个测试:不删控件,只删控件数组中控件句柄。
怪事又出现了。
3mile 发表于 2010-9-17 14:09 http://www.autoitx.com/images/common/back.gif
这样的话相当于一直都在删除最后一个索引内的控件,然后保持错位~~
弄不清的事情,只能很灵异的说…… 本帖最后由 afan 于 2010-9-17 16:23 编辑
回复 2# 3mile
其实删除数组内的元素与删除控件并无关联,注释掉 GUICtrlDelete($L[$c]) 就是一样的效果~
也就是说,当前的页面控件只是单纯的绑定了索引号,而不会跟随索引的标题。这个就郁闷之极了… 看来只能用类似浏览器的方式解决了,只用标签头,其它的页面均另外创建,根据 Tab 的索引文字或应用程序数据来判断相关页面控件的显示/隐藏。
貌似大家都不关心此问题哦,没关系,看看了解下就好,以后碰到此问题不至于迷惑 ~ This does not delete the controls on the tabitems This does not delete the controls on the tabitems
liufenglg 发表于 2010-9-17 16:47 http://www.autoitx.com/images/common/back.gif
这就是我在一楼所说的“(函数内有说明)”
页:
[1]