找回密码
 加入
搜索
查看: 5779|回复: 17

大问题,在gui里面 用 While 循环 怎么用按钮退出啊?

[复制链接]
发表于 2008-12-2 11:34:05 | 显示全部楼层 |阅读模式
搞了一个 循环ping 显示在ListView

可是 While 后 按钮都失去响应了

一直循环下去了

请问该如何处理

[au3]#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>

#include <WindowsConstants.au3>
#include <GuiListView.au3>

Opt("GUIOnEventMode", 1)
#Region ### START Koda GUI section ### Form=
$ccc=0
$111=-1
$aaa=0
$Form1 = GUICreate("Form1", 458, 360, 435, 318)
$ListView1 = GUICtrlCreateListView("服务器昵称    |IP/域名            |状态     |丢包情况  ", 8, 24, 440, 289)

        _GUICtrlListView_SetExtendedListViewStyle($ListView1 , BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))


$var = IniReadSection("Ip.ini", "服务器")
If @error Then
    MsgBox(4096, "", "发生错误,可能目标文件并非标准的INI文件.")
Else
    For $i = 1 To $var[0][0]
   

GUICtrlCreateListViewItem($var[$i][0] & "|" & $var[$i][1] & "|待测 |待测" , $ListView1)

    Next
EndIf

$Button2 = GUICtrlCreateButton("停止检测", 375, 320, 75, 25)
GUICtrlSetFont(-1, 9, 400, 0, "宋体")
GUICtrlSetOnEvent(-1,  "sotp")


$Button1 = GUICtrlCreateButton("开始检测", 288, 320, 75, 25)
GUICtrlSetOnEvent(-1,  "pingla")

GUICtrlSetFont(-1, 9, 400, 0, "宋体")
$Checkbox1 = GUICtrlCreateCheckbox("日志记录", 210, 325, 65, 17)
GUICtrlSetFont(-1, 9, 400, 0, "宋体")
GUISetOnEvent($GUI_EVENT_CLOSE, "qut")

GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###



While 1

Sleep (150)

WEnd


Func sotp()

RegWrite("HKEY_CURRENT_USER\Software\ping","ping",'Reg_sz',"yes")       
$ccc=10
EndFunc

Func pingla()


While $ccc<>10
                $111=-1

$ok=RegRead("HKEY_CURRENT_USER\Software\ping","ping")

if $ok="yes"Then
       
        $ccc=10
       
       
        RegDelete("HKEY_CURRENT_USER\Software\ping","ping")
                ExitLoop

        EndIf

$var = IniReadSection("Ip.ini", "服务器")
If @error Then
    MsgBox(4096, "", "发生错误,可能目标文件并非标准的INI文件.")
Else
    For $i = 1 To $var[0][0]
$aaa=0

        $111=$111+1
                        $1 = Ping($var[$i][1],250)
                               
                                if @error Then
                                $aaa=$aaa+1
                _GUICtrlListView_AddSubItem($ListView1, $111, "第一次失败", 2)
_GUICtrlListView_AddSubItem($ListView1, $111, $aaa*25&" %", 3)

                                EndIf
                               
                               
                                $2 = Ping($var[$i][1],250)
                                                       
                                                        if @error Then
                                $aaa=$aaa+1
                _GUICtrlListView_AddSubItem($ListView1, $111, "第二次失败", 2)
_GUICtrlListView_AddSubItem($ListView1, $111, $aaa*25&" %", 3)

                                EndIf
                               
                               
                                $3 = Ping($var[$i][1],250)
                                                       
                                                        if @error Then
                                $aaa=$aaa+1
                _GUICtrlListView_AddSubItem($ListView1, $111, "第三次失败", 2)
_GUICtrlListView_AddSubItem($ListView1, $111, $aaa*25&" %", 3)
                        EndIf
                                $4 = Ping($var[$i][1],250)
                                                       
                                                                if @error Then
                                $aaa=$aaa+1
                _GUICtrlListView_AddSubItem($ListView1, $111, "第四次失败", 2)
_GUICtrlListView_AddSubItem($ListView1, $111, $aaa*25&" %", 3)
                        EndIf

$cc=($1+$2+$3+$4)/4

if $cc=0 Then
       
        $cc="ping不通"
       
EndIf


if $cc=0 Then
       
        _GUICtrlListView_AddSubItem($ListView1, $111, $cc, 2)
       
Else
       
                _GUICtrlListView_AddSubItem($ListView1, $111, $cc&" MS", 2)

       
EndIf


_GUICtrlListView_AddSubItem($ListView1, $111, $aaa*25&" %", 3)



Sleep(200)

    Next
EndIf
       
        WEnd
EndFunc



func qut()

Exit
       
EndFunc[/au3]

[ 本帖最后由 lele9013 于 2008-12-2 11:36 编辑 ]
发表于 2008-12-2 12:16:58 | 显示全部楼层

回复 1# lele9013 的帖子

.......
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked") ; 设置窗口关闭事件
....
Func CLOSEClicked()
  MsgBox(0, "GUI 事件", "您选择了关闭!正在退出...")
  Exit
EndFunc
 楼主| 发表于 2008-12-2 12:45:31 | 显示全部楼层
没用啦。。我已经用了GUISetOnEvent了
发表于 2008-12-2 14:32:35 | 显示全部楼层

回复 3# lele9013 的帖子

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>

#include <WindowsConstants.au3>
#include <GuiListView.au3>

Opt("GUIOnEventMode", 1)
#Region ### START Koda GUI section ### Form=
$ccc=0
$111=-1
$aaa=0
$Form1 = GUICreate("Form1", 458, 360, 435, 318)
$ListView1 = GUICtrlCreateListView("服务器昵称    |IP/域名            |状态     |丢包情况  ", 8, 24, 440, 289)

        _GUICtrlListView_SetExtendedListViewStyle($ListView1 , BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))


$var = IniReadSection("Ip.ini", "服务器")
If @error Then 
    MsgBox(4096, "", "发生错误,可能目标文件并非标准的INI文件.")
Else
    For $i = 1 To $var[0][0]
    

GUICtrlCreateListViewItem($var[$i][0] & "|" & $var[$i][1] & "|待测 |待测" , $ListView1)

    Next
EndIf

$Button2 = GUICtrlCreateButton("停止检测", 375, 320, 75, 25)
GUICtrlSetFont(-1, 9, 400, 0, "宋体")
GUICtrlSetOnEvent(-1,  "sotp")


$Button1 = GUICtrlCreateButton("开始检测", 288, 320, 75, 25)
GUICtrlSetOnEvent(-1,  "pingla")

GUICtrlSetFont(-1, 9, 400, 0, "宋体")
$Checkbox1 = GUICtrlCreateCheckbox("日志记录", 210, 325, 65, 17)
GUICtrlSetFont(-1, 9, 400, 0, "宋体")
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")

GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###



While 1

Sleep (150)

WEnd


Func sotp()

RegWrite("HKEY_CURRENT_USER\Software\ping","ping",'Reg_sz',"yes")        
$ccc=10
EndFunc

Func pingla()


While $ccc<>10
                $111=-1

$ok=RegRead("HKEY_CURRENT_USER\Software\ping","ping")

if $ok="yes"Then
        
        $ccc=10
        
        
        RegDelete("HKEY_CURRENT_USER\Software\ping","ping")
                ExitLoop

        EndIf

$var = IniReadSection("Ip.ini", "服务器")
If @error Then 
    MsgBox(4096, "", "发生错误,可能目标文件并非标准的INI文件.")
Else
    For $i = 1 To $var[0][0]
$aaa=0

        $111=$111+1
                        $1 = Ping($var[$i][1],250)
                                
                                if @error Then 
                                $aaa=$aaa+1
                _GUICtrlListView_AddSubItem($ListView1, $111, "第一次失败", 2)
_GUICtrlListView_AddSubItem($ListView1, $111, $aaa*25&" %", 3)

                                EndIf
                                
                                
                                $2 = Ping($var[$i][1],250)
                                                        
                                                        if @error Then 
                                $aaa=$aaa+1
                _GUICtrlListView_AddSubItem($ListView1, $111, "第二次失败", 2)
_GUICtrlListView_AddSubItem($ListView1, $111, $aaa*25&" %", 3)

                                EndIf
                                
                                
                                $3 = Ping($var[$i][1],250)
                                                        
                                                        if @error Then 
                                $aaa=$aaa+1
                _GUICtrlListView_AddSubItem($ListView1, $111, "第三次失败", 2)
_GUICtrlListView_AddSubItem($ListView1, $111, $aaa*25&" %", 3)
                        EndIf
                                $4 = Ping($var[$i][1],250)
                                                        
                                                                if @error Then 
                                $aaa=$aaa+1
                _GUICtrlListView_AddSubItem($ListView1, $111, "第四次失败", 2)
_GUICtrlListView_AddSubItem($ListView1, $111, $aaa*25&" %", 3)
                        EndIf

$cc=($1+$2+$3+$4)/4

if $cc=0 Then
        
        $cc="ping不通"
        
EndIf


if $cc=0 Then
        
        _GUICtrlListView_AddSubItem($ListView1, $111, $cc, 2)
        
Else
        
                _GUICtrlListView_AddSubItem($ListView1, $111, $cc&" MS", 2)

        
EndIf


_GUICtrlListView_AddSubItem($ListView1, $111, $aaa*25&" %", 3)



Sleep(200)

    Next
EndIf
        
        WEnd
EndFunc



Func CLOSEClicked()
MsgBox(0, "GUI 事件", "您选择了关闭!正在退出...")
Exit
EndFunc



我试了是可以的,怎么你就不行呢?郁闷ing...

[ 本帖最后由 xkowen 于 2008-12-2 14:34 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2008-12-2 14:40:14 | 显示全部楼层
不是哦

你先按 开始检测 才循环啦

不检测 当然可以退出啦。。- -
发表于 2008-12-2 14:44:34 | 显示全部楼层

回复 5# lele9013 的帖子

哦,这样啊!Func(61行)里面不要用While,要不然就会在While处循环,然后就无法执行关闭函数!
 楼主| 发表于 2008-12-2 17:22:07 | 显示全部楼层
恩。。问题是 我是一直要循环ping 的。。哎 一个头大的问题
发表于 2008-12-2 18:46:51 | 显示全部楼层
设置一个
@error不就完了
发表于 2008-12-2 18:49:31 | 显示全部楼层
不是要无限循环吗,当你要的事件发生时设置一个错误信号就完了,把整个程序放在函数体内,用字程序调用的方式

[ 本帖最后由 netegg 于 2008-12-2 18:50 编辑 ]
发表于 2008-12-2 18:53:55 | 显示全部楼层
对了,忘了说一句,你要是自己没把握,千万别用while循环,会累死得
上次算个圆周率三天没敢关机,结果还错了
发表于 2008-12-2 22:28:53 | 显示全部楼层
以下代码定义了ESC键退出程序的热键功能
--------------------------------------------------
HotKeySet ( "{esc}" , "close" )
func close()
msgbox(0,"","程序将退出")
exit
endfunc
发表于 2008-12-2 22:36:01 | 显示全部楼层
While 1
_Ping()   ;把你的代码放在此处就可以,无限循环,还可以同时接收其他控件消息
Sleep (150)

WEnd
 楼主| 发表于 2008-12-3 14:57:23 | 显示全部楼层
问题是 这样 一开始 就循环了

怎么通过 按钮 来触发呢?

之前的有人说 是Ping的特殊关系造成的。。
发表于 2008-12-12 10:03:55 | 显示全部楼层
原帖由 lele9013 于 2008-12-3 14:57 发表
问题是 这样 一开始 就循环了

怎么通过 按钮 来触发呢?

之前的有人说 是Ping的特殊关系造成的。。



不是这个原因,我也遇到了同样的问题,暂时只能用hotkey解决
发表于 2008-12-12 12:46:27 | 显示全部楼层
hotkeyset 是比较有效 比较简单的方式

还可以使用其他的方式 由于使用了onevent模式
那么 添加一个$Exitbutton = GUICtrlCreateButton("Exit")
添加一个事件GUICtrlSetOnEvent($Exitbutton, "Exitbutton")
Func Exitbutton()
Exit
EndFunc
应该就能结束了
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-20 23:25 , Processed in 0.091448 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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