读取GUICtrlCreateListVie问题,明明选中了数据为什么if $GLHFBAK=0 then[已解决]
本帖最后由 ddx13 于 2010-11-21 21:58 编辑Opt("GUICloseOnESC", 0)
#include <DateTimeConstants.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
#include <ButtonConstants.au3>
#include <StaticConstants.au3>
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <EditConstants.au3>
#include <GuiStatusBar.au3>
#include <TabConstants.au3>
#include <GuiListView.au3>
#include <GuiTab.au3>
#include <Date.au3>
#include <File.au3>
$GLHF = GUICreate("数据库恢复", 332, 235, -1, -1, BitOR($WS_SYSMENU, $WS_CAPTION, $WS_BORDER))
$GLHFList = GUICtrlCreateListView("", 8, 8, 314, 190, $LVS_SORTASCENDING, BitOR($WS_EX_CLIENTEDGE, $LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
_GUICtrlListView_AddColumn($GLHFList, "文件名", 85)
_GUICtrlListView_AddColumn($GLHFList, "备份时间", 150)
_GUICtrlListView_AddColumn($GLHFList, "文件大小", 75)
_GUICtrlListView_JustifyColumn($GLHFList, 0, 2)
_GUICtrlListView_JustifyColumn($GLHFList, 1, 2)
_GUICtrlListView_JustifyColumn($GLHFList, 2, 2)
$GLHFB1 = GUICtrlCreateButton("确定", 48, 208, 70, 20)
$GLHFB2 = GUICtrlCreateButton("退出", 208, 208, 70, 20)
$MDBBAK = _FileListToArray(@ScriptDir & "\MDBBAK", "*.bak", 1)
If Not @error Then
For $i = 1 To $MDBBAK
$BAKFILEtime = FileGetTime(@ScriptDir & "\MDBBAK\" & $MDBBAK[$i], 1)
$BAKDX = Round(FileGetSize(@ScriptDir & "\MDBBAK\" & $MDBBAK[$i]) / 1024 / 1024, 2) & "MB"
GUICtrlCreateListViewItem($MDBBAK[$i] & "|" & $BAKFILEtime & "年" & $BAKFILEtime & "月" & $BAKFILEtime & "日 " & $BAKFILEtime & ":" & $BAKFILEtime & ":" & $BAKFILEtime & "|" & $BAKDX, $GLHFList)
Next
EndIf
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE, $GLHFB2
Exit
Case $GLHFB1
$GLHFBAK = GUICtrlRead(GUICtrlRead($GLHFList))
If $GLHFBAK = 0 Then
MsgBox(0, "", $GLHFBAK)
MsgBox(262144, "错误", "请选中你要恢复的数据备份文件!!!")
ContinueLoop
EndIf
$GLHFBAKCF = StringSplit($GLHFBAK, "|", 1)
;IF FileCopy ( @ScriptDir & "\MDBBAK\"&$GLHFBAKCF , $FileMDB , 1)=0 then
; msgbox(262144,"错误","数据备份恢复失败,请重试!!!" , "", $GLF )
; ContinueLoop
;EndIf
AutoItWinSetTitle("注销")
ShellExecute(@AutoItExe, "", @ScriptDir)
Exit
EndSwitch
WEnd 明明,我选中了数据,msgbox(0,"",$GLHFBAK)显示的是213.bak|2010-12-13|2.2MB|
已经有数据出现了,为什么为什么if $GLHFBAK=0 then还能成立。想不通,可能我跑到哪个死角去了,大家帮我看看。谢谢。 if $GLHFBAK=0 then
改成
if $GLHFBAK=="" then 留意 字符串 和 数值 的不同
if = then
和
if == then
的不同 本帖最后由 ddx13 于 2010-11-6 20:51 编辑
这个我知道,但是想不通啊,字符和0之间怎么会是等于呢??
我暂时解决方法是if $GLHFBAK==0 then因为如果等于别的话不选中的话会出错。
我几个子窗口都这样写的,都没有出现什么问题。独独在这个子窗口出错了,前面几个子窗口是读数据库的,最前面是自动编号。而这个呢是扫描文件上去的。但是选中后出现了字符啊,竟然告诉我和0相等,晕死真得有点想不明白。 先 guictrlgetstate listview 的状态
如果是 $gui_uncheck ,就是没有选中。 if "abd" = 0 then
是这样的: = 是判断数值是否相等 == 是判断字符串是否相同
if "abc" = 0 会自动把 "abc" 转成数值 变成了 0,然后 0 = 0 了。 先 guictrlgetstate listview 的状态
如果是 $gui_uncheck ,就是没有选中。这里更定是选中了,因为有字符串出来了,如果没有的话是为0
if "abc" = 0 会自动把 "abc" 转成数值 变成了 0,然后 0 = 0 了。
不太明白,IF是用到判断,而不是用于赋予,为什么会在这里0=0真得不太明白了。 是我搞错了 guictrlread( listview) 的返回值,
guictrlread( listview ) 返回的是 listview item 的id,不是它的内容。
那么,
$GLHFBAK = GUICtrlRead(GUICtrlRead($GLHFList))
在没有选中的情况下
GUICtrlRead($GLHFList) 返回 0
GUICtrlRead(GUICtrlRead($GLHFList))就是 guictrlread( 0 ),也还是 0。
guictrlread( 0 )是没有意义的。 没有选中的情况下是为0啊,这个我知道,现在最主要的是,选中了,出现字符了,竟然还是等于0,郁闷就在这里。 回复 10# ddx13
在选中的情况下,就是 7楼所说的情况了。
if语句的写法有问题。 改成这样吧:
Case $GLHFB1
$glhfbak_id = GUICtrlRead($GLHFList)
$GLHFBAK = GUICtrlRead(GUICtrlRead($GLHFList))
If $glhfbak_id = 0 Then
MsgBox(0, "", $GLHFBAK)
MsgBox(262144, "错误", "请选中你要恢复的数据备份文件!!!")
ContinueLoop
EndIf 本帖最后由 lchl0588 于 2010-11-7 11:35 编辑
Opt("GUICloseOnESC", 0)
#include <DateTimeConstants.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
#include <ButtonConstants.au3>
#include <StaticConstants.au3>
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <EditConstants.au3>
#include <GuiStatusBar.au3>
#include <TabConstants.au3>
#include <GuiListView.au3>
#include <GuiTab.au3>
#include <Date.au3>
#include <File.au3>
$GLHF = GUICreate("数据库恢复", 332, 235, -1, -1, BitOR($WS_SYSMENU, $WS_CAPTION, $WS_BORDER))
$GLHFList = GUICtrlCreateListView("", 8, 8, 314, 190, $LVS_SORTASCENDING, BitOR($WS_EX_CLIENTEDGE, $LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
_GUICtrlListView_AddColumn($GLHFList, "文件名", 85)
_GUICtrlListView_AddColumn($GLHFList, "备份时间", 150)
_GUICtrlListView_AddColumn($GLHFList, "文件大小", 75)
_GUICtrlListView_JustifyColumn($GLHFList, 0, 2)
_GUICtrlListView_JustifyColumn($GLHFList, 1, 2)
_GUICtrlListView_JustifyColumn($GLHFList, 2, 2)
$GLHFB1 = GUICtrlCreateButton("确定", 48, 208, 70, 20)
$GLHFB2 = GUICtrlCreateButton("退出", 208, 208, 70, 20)
$MDBBAK = _FileListToArray(@ScriptDir & "\MDBBAK", "*.bak", 1)
If Not @error Then
For $i = 1 To $MDBBAK
$BAKFILEtime = FileGetTime(@ScriptDir & "\MDBBAK\" & $MDBBAK[$i], 1)
$BAKDX = Round(FileGetSize(@ScriptDir & "\MDBBAK\" & $MDBBAK[$i]) / 1024 / 1024, 2) & "MB"
GUICtrlCreateListViewItem($MDBBAK[$i] & "|" & $BAKFILEtime & "年" & $BAKFILEtime & "月" & $BAKFILEtime & "日 " & $BAKFILEtime & ":" & $BAKFILEtime & ":" & $BAKFILEtime & "|" & $BAKDX, $GLHFList)
Next
EndIf
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE, $GLHFB2
Exit
Case $GLHFB1
$GLHFBAK = GUICtrlRead($GLHFList)
If $GLHFBAK=0 Then
MsgBox(262144, "错误", "请选中框中任一恢复数据备份文件;"&@CRLF&"或备份文件不存在,请检查下!!!")
ContinueLoop
EndIf
MsgBox(0,"测试","测试成功")
Exit
EndSwitch
WEnd测试成功 我明白上面二位朋友的意思,我在另的子窗口中是这样的写的,但是这里的情况都是正常的
$GSTJ2 = GUICreate("查看详情", 399, 367, -1, -1, BitOR($WS_SYSMENU, $WS_CAPTION, $WS_BORDER), -1,$GSF)
IF $XQ=1 Then
$GSXGLIST=GUICtrlRead(GUICtrlRead($GSList))
if $GSXGLIST=0 then
GUIDelete($GSTJ2)
msgbox(262144,"错误","请选中你要查看的数据!!!")
Return 0
endif
Else
$GSXGLIST=$GSList
Endif
$GSTJT=GUICtrlCreateTab(2, 2, 393, 361, -1, BitOR($TCS_EX_FLATSEPARATORS,$WS_EX_CLIENTEDGE))
在这里就不会有问题。二者之间的区别在于
一个是在窗体中,我是现在WHILE中
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE, $GLHFB2
Exit
Case $GLHFB1
$TabSheet = GUICtrlCreateTabItem("公司信息")
在WHILE中,就会出现错误。不知道哪里做了什么新的改变,不太明白。我记得我以前也遇到过这样的问题,但是没有办法去理解它为什么会这样。如果再有第三次遇到的时候还是不明白是怎么回事,只有测试的时候才知道这里错了。 那在while下,把switch换成Select试试!!While 1
$nMsg = GUIGetMsg()
Select
Case $nMsg = $GUI_EVENT_CLOSE
Exit
Case $nMsg = $GLHFB2
Exit
Case $nMsg = $GLHFB1
$GLHFBAK = GUICtrlRead($GLHFList)
If $GLHFBAK=0 Then
MsgBox(262144, "错误", "请选中框中任一恢复数据备份文件;"&@CRLF&"或备份文件不存在,请检查下!!!")
ContinueLoop
EndIf
MsgBox(0,"测试","测试成功")
Exit
EndSelect
WEnd
页:
[1]