大问题,在gui里面 用 While 循环 怎么用按钮退出啊?
搞了一个 循环ping 显示在ListView可是 While 后 按钮都失去响应了
一直循环下去了
请问该如何处理
#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
GUICtrlCreateListViewItem($var[$i] & "|" & $var[$i] & "|待测 |待测" , $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
$aaa=0
$111=$111+1
$1 = Ping($var[$i],250)
if @error Then
$aaa=$aaa+1
_GUICtrlListView_AddSubItem($ListView1, $111, "第一次失败", 2)
_GUICtrlListView_AddSubItem($ListView1, $111, $aaa*25&" %", 3)
EndIf
$2 = Ping($var[$i],250)
if @error Then
$aaa=$aaa+1
_GUICtrlListView_AddSubItem($ListView1, $111, "第二次失败", 2)
_GUICtrlListView_AddSubItem($ListView1, $111, $aaa*25&" %", 3)
EndIf
$3 = Ping($var[$i],250)
if @error Then
$aaa=$aaa+1
_GUICtrlListView_AddSubItem($ListView1, $111, "第三次失败", 2)
_GUICtrlListView_AddSubItem($ListView1, $111, $aaa*25&" %", 3)
EndIf
$4 = Ping($var[$i],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
[ 本帖最后由 lele9013 于 2008-12-2 11:36 编辑 ]
回复 1# lele9013 的帖子
.......GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked") ; 设置窗口关闭事件
....
Func CLOSEClicked()
MsgBox(0, "GUI 事件", "您选择了关闭!正在退出...")
Exit
EndFunc 没用啦。。我已经用了GUISetOnEvent了
回复 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
GUICtrlCreateListViewItem($var[$i] & "|" & $var[$i] & "|待测 |待测" , $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
$aaa=0
$111=$111+1
$1 = Ping($var[$i],250)
if @error Then
$aaa=$aaa+1
_GUICtrlListView_AddSubItem($ListView1, $111, "第一次失败", 2)
_GUICtrlListView_AddSubItem($ListView1, $111, $aaa*25&" %", 3)
EndIf
$2 = Ping($var[$i],250)
if @error Then
$aaa=$aaa+1
_GUICtrlListView_AddSubItem($ListView1, $111, "第二次失败", 2)
_GUICtrlListView_AddSubItem($ListView1, $111, $aaa*25&" %", 3)
EndIf
$3 = Ping($var[$i],250)
if @error Then
$aaa=$aaa+1
_GUICtrlListView_AddSubItem($ListView1, $111, "第三次失败", 2)
_GUICtrlListView_AddSubItem($ListView1, $111, $aaa*25&" %", 3)
EndIf
$4 = Ping($var[$i],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 编辑 ] 不是哦
你先按 开始检测 才循环啦
不检测 当然可以退出啦。。- -
回复 5# lele9013 的帖子
哦,这样啊!Func(61行)里面不要用While,要不然就会在While处循环,然后就无法执行关闭函数! 恩。。问题是 我是一直要循环ping 的。。哎 一个头大的问题 设置一个@error不就完了 不是要无限循环吗,当你要的事件发生时设置一个错误信号就完了,把整个程序放在函数体内,用字程序调用的方式
[ 本帖最后由 netegg 于 2008-12-2 18:50 编辑 ] 对了,忘了说一句,你要是自己没把握,千万别用while循环,会累死得
上次算个圆周率三天没敢关机,结果还错了 以下代码定义了ESC键退出程序的热键功能
--------------------------------------------------
HotKeySet ( "{esc}" , "close" )
func close()
msgbox(0,"","程序将退出")
exit
endfunc While 1
_Ping() ;把你的代码放在此处就可以,无限循环,还可以同时接收其他控件消息
Sleep (150)
WEnd 问题是 这样 一开始 就循环了
怎么通过 按钮 来触发呢?
之前的有人说 是Ping的特殊关系造成的。。 原帖由 lele9013 于 2008-12-3 14:57 发表 http://www.autoitx.com/images/common/back.gif
问题是 这样 一开始 就循环了
怎么通过 按钮 来触发呢?
之前的有人说 是Ping的特殊关系造成的。。
不是这个原因,我也遇到了同样的问题,暂时只能用hotkey解决 hotkeyset 是比较有效 比较简单的方式
还可以使用其他的方式 由于使用了onevent模式
那么 添加一个$Exitbutton = GUICtrlCreateButton("Exit")
添加一个事件GUICtrlSetOnEvent($Exitbutton, "Exitbutton")
Func Exitbutton()
Exit
EndFunc
应该就能结束了
页:
[1]
2