我想问的是像这样的话怎么改?#include <GuiListView.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
_11()
Func _11()
$dir = @ScriptDir&"\config.ini"
$Form1 = GUICreate("列表框操作", 280, 270)
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
$ListView1 = GUICtrlCreateListView("账号 |密码 |", 10, 10, 260, 150)
$Button1 = GUICtrlCreateButton("添加", 185, 178, 75, 25, $WS_GROUP)
$Input1 = GUICtrlCreateInput("", 60, 180, 120, 21)
$Input2 = GUICtrlCreateInput("", 60, 220, 120, 21)
$Label1 = GUICtrlCreateLabel("账号:", 20, 183, 36, 17)
$Label2 = GUICtrlCreateLabel("密码:", 20, 223, 36, 17)
$Label3 = GUICtrlCreateLabel("数据", 200, 223, 36, 17)
$Label4 = GUICtrlCreateLabel("0", 230, 223, 36, 17)
GUISetState(@SW_SHOW)
Read()
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
tian()
EndSwitch
WEnd
EndFunc
func WM_NOTIFY($hWndGUI, $MsgID, $WParam, $LParam)
Local $tagNMHDR, $Event, $hWndFrom, $IDFrom
Local $tagNMHDR = DllStructCreate("int;int;int", $LParam)
If @error Then Return $GUI_RUNDEFMSG
$IDFrom = DllStructGetData($tagNMHDR, 2)
$Event = DllStructGetData($tagNMHDR, 3)
$tagNMHDR = 0
Switch $IDFrom;选择产生事件的控件
Case $ListView1
Switch $Event; 选择产生的事件
Case $NM_CLICK ; 左击
$a = _GUICtrlListView_GetSelectedIndices($ListView1)
$b = _GUICtrlListView_GetItemTextString($ListView1, Number($a))
$c = StringSplit($b,"|")
GUICtrlSetData ($Input1 ,$c)
GUICtrlSetData ($Input2 ,$c)
Case $NM_DBLCLK ; 双击
Case $NM_RCLICK ; 右击
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY
Func Read()
$z = 0
_GUICtrlListView_DeleteAllItems($ListView1)
$read = IniReadSection($dir,"config")
If Not @error Then
For $i = 1 To $read
GUICtrlCreateListViewItem($read[$i], $ListView1)
_GUICtrlListView_AddSubItem($ListView1, $z, $read[$i], 1, $z+1)
GUICtrlSetData($Label4,$z+1)
$z += 1
Next
EndIf
EndFunc
Func tian()
$z = GUICtrlRead($Label4)
$a = GUICtrlRead($Input1)
$b = GUICtrlRead($Input2)
If $a <> "" And $b <> "" Then
IniWrite($dir,"config",$a,$b)
GUICtrlCreateListViewItem($a, $ListView1)
_GUICtrlListView_AddSubItem($ListView1, $z, $b, 1, $z+1)
MsgBox(0,"提示"," 账号: "&$a&" 密码: "&$b&" 保存成功 ")
GUICtrlSetData($Input1,"")
GUICtrlSetData($Input2,"")
GUICtrlSetData($Label4,$z+1)
EndIf
EndFunc 回复 14# netegg
请教下怎么改! 本帖最后由 netegg 于 2010-1-8 23:07 编辑
# $hListView = _GUICtrlListView_Create($GUI, "", 10, 10, 260, 150)
# GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
下面的消息子函数就可以用了 你是想做成事件模式吧? 刚看明白楼主什么意思,做函数前,把listview定义成全局变量Globle $listview,后面的操作再说后面的 回复 18# netegg
不行耶
还是提示变量为定义!
如16代码那样
只要他不提示错误就行了! 回复 19# 水木子
也不是什么事件
您的代码就是我想要的效果
只是我想把那一整段代码放在FUNC里
可能有多处要用到 !
但是一放FUNC里就出错!
FUNC又不能嵌套 麻烦就在这! 没仔细看。。。#include <GuiListView.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Dim $ListView1, $dir, $z, $Label4, $Input1, $Input2
_11()
Func _11()
$dir = @ScriptDir & "\config.ini"
$Form1 = GUICreate("列表框操作", 280, 270)
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
$ListView1 = GUICtrlCreateListView("账号 |密码 |", 10, 10, 260, 150)
$Button1 = GUICtrlCreateButton("添加", 185, 178, 75, 25, $WS_GROUP)
$Input1 = GUICtrlCreateInput("", 60, 180, 120, 21)
$Input2 = GUICtrlCreateInput("", 60, 220, 120, 21)
$Label1 = GUICtrlCreateLabel("账号:", 20, 183, 36, 17)
$Label2 = GUICtrlCreateLabel("密码:", 20, 223, 36, 17)
$Label3 = GUICtrlCreateLabel("数据", 200, 223, 36, 17)
$Label4 = GUICtrlCreateLabel("0", 230, 223, 36, 17)
GUISetState(@SW_SHOW)
Read()
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
tian()
EndSwitch
WEnd
EndFunc ;==>_11
Func WM_NOTIFY($hWndGUI, $MsgID, $WParam, $LParam)
Local $tagNMHDR, $Event, $hWndFrom, $IDFrom
Local $tagNMHDR = DllStructCreate("int;int;int", $LParam)
If @error Then Return $GUI_RUNDEFMSG
$IDFrom = DllStructGetData($tagNMHDR, 2)
$Event = DllStructGetData($tagNMHDR, 3)
$tagNMHDR = 0
Switch $IDFrom;选择产生事件的控件
Case $ListView1
Switch $Event; 选择产生的事件
Case $NM_CLICK ; 左击
$a = _GUICtrlListView_GetSelectedIndices($ListView1)
$b = _GUICtrlListView_GetItemTextString($ListView1, Number($a))
$c = StringSplit($b, "|")
GUICtrlSetData($Input1, $c)
GUICtrlSetData($Input2, $c)
Case $NM_DBLCLK ; 双击
Case $NM_RCLICK ; 右击
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY
Func Read()
$z = 0
_GUICtrlListView_DeleteAllItems($ListView1)
$read = IniReadSection($dir, "config")
If Not @error Then
For $i = 1 To $read
GUICtrlCreateListViewItem($read[$i], $ListView1)
_GUICtrlListView_AddSubItem($ListView1, $z, $read[$i], 1, $z + 1)
GUICtrlSetData($Label4, $z + 1)
$z += 1
Next
EndIf
EndFunc ;==>Read
Func tian()
$z = GUICtrlRead($Label4)
$a = GUICtrlRead($Input1)
$b = GUICtrlRead($Input2)
If $a <> "" And $b <> "" Then
IniWrite($dir, "config", $a, $b)
GUICtrlCreateListViewItem($a, $ListView1)
_GUICtrlListView_AddSubItem($ListView1, $z, $b, 1, $z + 1)
MsgBox(0, "提示", " 账号: " & $a & " 密码: " & $b & " 保存成功 ")
GUICtrlSetData($Input1, "")
GUICtrlSetData($Input2, "")
GUICtrlSetData($Label4, $z + 1)
EndIf
EndFunc ;==>tian 本帖最后由 netegg 于 2010-1-9 01:44 编辑
回复netegg
不行耶
还是提示变量为定义!
如16代码那样
只要他不提示错误就行了!
jscpu 发表于 2010-1-8 23:37 http://www.autoitx.com/images/common/back.gif
哪个变量未定义,不是有三个#include吗,下一行直接定义全局变量
把前面几位的代码里面dim改成global 哎!简直没搞懂,基本靠猜。 变量未声明 回复 1# jscpu
1、根据选择的条目修改input的内容的方法,不建议楼主用检测鼠标点击操作的方法,那样既占资源(貌似),而且有出错的可能,更重要的是有一个最大的bug(就是鼠标点的时候,input可以根据所选内容进行修改,键盘上下键选的时候,input就傻了),解决这个问题我的方法,请参考【传送门】
2、提示变量不存在的问题,说明你没有好好看过au3的帮助,我引用一下au3的帮助里的原文:
变量的作用域
某个变量的作用域要看您是何时以及如何声明该变量的. 如果您在脚本开头且在所有函数之外声明了某个变量 则该变量将在Global(全局)范围内存在,此时您就可以在脚本的任意位置读取或更改该变量, 我们把这种变量称为全局变量.
如果您是在某个 函数 内部声明一个变量则该变量就只在该函数的 Local(局部) 范围内有效,我们把这种变量称为局部变量. 在函数内创建的变量将在函数结束时 自动被销毁.
在默认情况下,使用 Dim 声明的变量或在函数内部直接赋值而成的变量都是 Local(局部)变量,除非 有同名的全局变量存在(此时将视此变量为该全局变量).另外我们可以使用关键字 Local 和 Global 来声明变量以 强制 变量的作用域.
所以你要解决这个问题,有两个方法,
一、把所有的全局变量都在func 外边声明,也就是说你就不要去想着把一段创建gui的代码用func包括起来了,除非你在这个func外边把所有的控件变量都提前声明一遍,但那样就绕弯路啦,相当于你写了两遍gui的代码。
二、如果你非要把创建gui的代码部分用func包括起来,那另外一个方法就是,在func里面创建控件的时候把变量声明为全局变量 Global
三、要说啥来着,忘了,回头想起来再说。刚明明想好了的,被同事打断了,工作了,不说了。、、 可怜的水木子,费老大劲了,呵呵
建议楼主上传全部代码,光让猜怎么行啊,光看你的出错情况,应该是简单的逻辑问题
页:
1
[2]