找回密码
 加入
搜索
查看: 3361|回复: 14

[AU3基础] 读取GUICtrlCreateListVie问题,明明选中了数据为什么if $GLHFBAK=0 then[已解决]

  [复制链接]
发表于 2010-11-6 19:58:33 | 显示全部楼层 |阅读模式
本帖最后由 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[0]
                $BAKFILEtime = FileGetTime(@ScriptDir & "\MDBBAK\" & $MDBBAK[$i], 1)
                $BAKDX = Round(FileGetSize(@ScriptDir & "\MDBBAK\" & $MDBBAK[$i]) / 1024 / 1024, 2) & "MB"
                GUICtrlCreateListViewItem($MDBBAK[$i] & "|" & $BAKFILEtime[0] & "年" & $BAKFILEtime[1] & "月" & $BAKFILEtime[2] & "日 " & $BAKFILEtime[3] & ":" & $BAKFILEtime[4] & ":" & $BAKFILEtime[5] & "|" & $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[1] , $FileMDB , 1)=0 then
                        ;        msgbox(262144,"错误","数据备份恢复失败,请重试!!!" , "", $GLF )
                        ;        ContinueLoop
                        ;EndIf
                        AutoItWinSetTitle("注销")
                        ShellExecute(@AutoItExe, "", @ScriptDir)
                        Exit
        EndSwitch
WEnd
 楼主| 发表于 2010-11-6 19:59:50 | 显示全部楼层
明明,我选中了数据,msgbox(0,"",$GLHFBAK)显示的是213.bak|2010-12-13|2.2MB|
已经有数据出现了,为什么为什么if $GLHFBAK=0 then还能成立。想不通,可能我跑到哪个死角去了,大家帮我看看。谢谢。
发表于 2010-11-6 20:35:43 | 显示全部楼层
if $GLHFBAK=0 then
改成
if $GLHFBAK=="" then
发表于 2010-11-6 20:41:39 | 显示全部楼层
留意 字符串 和 数值 的不同
if = then

if == then
的不同
 楼主| 发表于 2010-11-6 20:47:47 | 显示全部楼层
本帖最后由 ddx13 于 2010-11-6 20:51 编辑

这个我知道,但是想不通啊,字符和0之间怎么会是等于呢??
我暂时解决方法是if $GLHFBAK==0 then因为如果等于别的话不选中的话会出错。

我几个子窗口都这样写的,都没有出现什么问题。独独在这个子窗口出错了,前面几个子窗口是读数据库的,最前面是自动编号。而这个呢是扫描文件上去的。但是选中后出现了字符啊,竟然告诉我和0相等,晕死真得有点想不明白。
发表于 2010-11-6 21:12:27 | 显示全部楼层
先 guictrlgetstate listview 的状态
如果是 $gui_uncheck ,就是没有选中。
发表于 2010-11-6 21:15:00 | 显示全部楼层
if "abd" = 0 then

是这样的: = 是判断数值是否相等 == 是判断字符串是否相同

if "abc" = 0 会自动把 "abc" 转成数值 变成了 0,然后 0 = 0 了。
 楼主| 发表于 2010-11-6 21:39:21 | 显示全部楼层
先 guictrlgetstate listview 的状态
如果是 $gui_uncheck ,就是没有选中。这里更定是选中了,因为有字符串出来了,如果没有的话是为0

if "abc" = 0 会自动把 "abc" 转成数值 变成了 0,然后 0 = 0 了。
不太明白,IF是用到判断,而不是用于赋予,为什么会在这里0=0真得不太明白了。
发表于 2010-11-6 22:14:11 | 显示全部楼层
是我搞错了 guictrlread( listview) 的返回值,

guictrlread( listview ) 返回的是 listview item 的id,不是它的内容。

那么,
$GLHFBAK = GUICtrlRead(GUICtrlRead($GLHFList))
在没有选中的情况下
GUICtrlRead($GLHFList) 返回 0
GUICtrlRead(GUICtrlRead($GLHFList))就是 guictrlread( 0 ),也还是 0。

guictrlread( 0 )是没有意义的。
 楼主| 发表于 2010-11-6 23:32:37 | 显示全部楼层
没有选中的情况下是为0啊,这个我知道,现在最主要的是,选中了,出现字符了,竟然还是等于0,郁闷就在这里。
发表于 2010-11-7 10:21:57 | 显示全部楼层
回复 10# ddx13


在选中的情况下,就是 7楼所说的情况了。
if语句的写法有问题。
发表于 2010-11-7 10:23:53 | 显示全部楼层
改成这样吧:


Case $GLHFB1
                        $glhfbak_id = GUICtrlRead($GLHFList)
                        $GLHFBAK = GUICtrlRead(GUICtrlRead($GLHFList))
                        If $glhfbak_id = 0 Then
                                MsgBox(0, "", $GLHFBAK)
                                MsgBox(262144, "错误", "请选中你要恢复的数据备份文件!!!")
                                ContinueLoop
                        EndIf
发表于 2010-11-7 11:33:43 | 显示全部楼层
本帖最后由 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[0]
                $BAKFILEtime = FileGetTime(@ScriptDir & "\MDBBAK" & $MDBBAK[$i], 1)
                $BAKDX = Round(FileGetSize(@ScriptDir & "\MDBBAK" & $MDBBAK[$i]) / 1024 / 1024, 2) & "MB"
                GUICtrlCreateListViewItem($MDBBAK[$i] & "|" & $BAKFILEtime[0] & "年" & $BAKFILEtime[1] & "月" & $BAKFILEtime[2] & "日 " & $BAKFILEtime[3] & ":" & $BAKFILEtime[4] & ":" & $BAKFILEtime[5] & "|" & $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
测试成功
 楼主| 发表于 2010-11-7 14:10:01 | 显示全部楼层
我明白上面二位朋友的意思,我在另的子窗口中是这样的写的,但是这里的情况都是正常的
        $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[1] = GUICtrlCreateTabItem("公司信息")

在WHILE中,就会出现错误。不知道哪里做了什么新的改变,不太明白。我记得我以前也遇到过这样的问题,但是没有办法去理解它为什么会这样。如果再有第三次遇到的时候还是不明白是怎么回事,只有测试的时候才知道这里错了。
发表于 2010-11-7 17:56:32 | 显示全部楼层
那在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
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-23 12:53 , Processed in 0.073914 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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