ListView UDF - ListView消息扩展http://www.autoitx.com/forum.php ... p;extra=&page=1帖子中用于原位编辑ListView数据确实不错,但在应用时我发现加上改变按钮状态的语句会导致程序崩溃无反应,原消息处理部分语句为:
Case $LVN_EDITEND ; 结束编辑。
Local $tEditEnd, $iFlags
$tEditEnd = DllStructCreate($tagLISTVIEW_EDITEND, $ilParam)
$iFlags = DllStructGetData($tEditEnd, "EndFlags")
; 判断是否输入enter键结束,若非,不保存编辑结果。
If ($iFlags <> $LVEF_ENTER) Then
DllStructSetData($tEditEnd, "AutoComplete", 0)
Else
DllStructSetData($tEditEnd, "AutoComplete", 1)
EndIf
; 以上的2句DllStructSetData,可以删除其中一句,
; 因为AutoComplete的值默认为_GUICtrlListView_RegisterEditEvent中$fAutoComplete的值。
在我的应用中为:
Case $LVN_EDITEND ; 结束编辑。
Local $tEditEnd, $iFlags, $Text, $iItemMax
$tEditEnd = DllStructCreate($tagLISTVIEW_EDITEND, $ilParam)
$iItem = DllStructGetData($tEditEnd, "Item")
$iSubItem = DllStructGetData($tEditEnd, "SubItem")
$iFlags = DllStructGetData($tEditEnd, "EndFlags")
$Text = _GUICtrlListView_GetEditData($hListView)
; 判断是否输入enter键结束,若非,不保存编辑结果。
If ($iFlags = $LVEF_ENTER) And StringIsDigit($Text) Then
$Text = Number($Text)
$iItemMax = 100
If $iSubItem = 2 Then
If $iItem=0 Or ($ItemNo=17 And $iItem=12) Or ($ItemNo=14 And $iItem=9) Or ($ItemNo=16 And $iItem=13) Then
$iItemMax = 120
ElseIf ($ItemNo=17 And $iItem=15) Or ($ItemNo=14 And $iItem=12) Or ($ItemNo=16 And $iItem=16) Then
$iItemMax=200
EndIf
ElseIf $iSubItem = 3 Then
If $iItem = 0 Or $iItem = 4 Or $iItem = $ItemNo-5 Or $iItem > $ItemNo-3 Then $iItemMax = 253
ElseIf $iSubItem = 5 Then
$iItemMax = 0x7fffffff
EndIf
If $Text > $iItemMax Then $Text = $iItemMax
_GUICtrlListView_AddSubItem($hListView, $iItem, $Text, $iSubItem)
UpdateSubItem6($iItem)
If $EditedNow=0 Then
GUICtrlSendToDummy($EditedNowMSG)
$EditedNow=1
EndIf
EndIf
DllStructSetData($tEditEnd, "AutoComplete", 0)
这里采用了GUICtrlSendToDummy($EditedNowMSG)语句来改变按钮状态,Dummy控件处理消息的部分就是下面的语句:
Case $EditedNowMSG
GUICtrlSetState($SaveButton, $GUI_ENABLE)
GUICtrlSetState($SaveMenuItem, $GUI_ENABLE)
GUICtrlSetState($SaveFile, $GUI_ENABLE)
本来原来是直接把这3条改变按钮状态语句放在GUICtrlSendToDummy($EditedNowMSG)
这条语句位置,但这样就会导致程序死机,因此只能通过Dunmy控件间接实现。虽然问题解决了,但实在无法理解这几条语句怎么会导致死机? |