[已解决]根据txt文件的行数批量创建 lable 如何将文件名赋值到各个lable?
本帖最后由 laomeng 于 2014-12-15 14:31 编辑想根据txt中的各行 创建一个lable, 这个txt中的文件数不是固定的 。 目前可以根据行数创建labe 但是lable对应的文件名不知道怎么显示上去。这样做的话 lable的背景和上面的字体的背景 可以单独 设置吗?还有一个问题就是 如果点了lable 1 那么就执行c:\111\lable1\*.exe , 点了lable 2c:\111\lable2\*.exe以此类推 . 谢谢指教!!
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Include <File.au3>
Local $Lines = _FileCountLines("wz.txt") ;返回指定文件的总行数
Global $aButNum[$Lines] ;按钮总数
Global $iNumber = 3 ;
Global $X = 50, $Y = 50
Opt('GUIOnEventMode', 1)
GUICreate('循环创建按钮', 300, 300)
GUISetOnEvent(-3, '_ButtonEvents')
for $j = 1 To $Lines Step 1
$line = FileReadLine(".\wz.txt", $j)
;InputBox("读取", "读取第 "& $j &"行: ", $Line); 每次读取一行文本,直到文件结束.
Next
For $i = 0 To UBound($aButNum) - 1
$aButNum[$i] = GUICtrlCreateLabel($Line, $X * Mod($i, $iNumber) + 25, $Y * Floor($i / $iNumber) + 25, 50, 50)
GUICtrlSetOnEvent(-1, '_ButtonEvents')
Next
GUISetState()
While 1
Sleep(250)
WEnd
Func _ButtonEvents()
Switch @GUI_CtrlId
Case -3
Exit
Case $aButNum To $aButNum
MsgBox(0, '', '按钮 - ' & @GUI_CtrlId - $aButNum + 1)
EndSwitch
EndFunc
wz.txt
第1个按钮
第2个按钮
第3个按钮
第4个按钮
第5个按钮
第6个按钮
第7个按钮
第8个按钮
第9个按钮
第10个按钮
第N个按钮
回复 1# laomeng
Local $aLines
If Not _FileReadToArray("wz.txt", $aLines) Then Exit
Global $aBut[$aLines] ;按钮总数
Global $iNumber = 3 ;
Global $X = 50, $Y = 50
Opt('GUIOnEventMode', 1)
GUICreate('循环创建按钮', 300, 300)
GUISetOnEvent(-3, '_ButtonEvents')
For $i = 1 To $aLines
$aBut[$i-1] = GUICtrlCreateLabel($aLines[$i], $X * Mod($i, $iNumber) + 25, $Y * Floor($i / $iNumber) + 25, 50, 50)
GUICtrlSetOnEvent(-1, '_ButtonEvents')
Next 本帖最后由 netegg 于 2014-12-14 17:57 编辑
回复 2# user3000
这样恐怕不行吧,创建出来的按钮,只执行相同操作 ,lz后面那个判断似乎不能省
不过楼主那个guisetonevent,好像也有点问题,退出的时候才执行,还建立什么按钮 回复 2# user3000
谢 我回去试下 回复 3# netegg
请指教 回复 4# laomeng
已经记录下控件ID,当然它的背景色由你喜欢设成什么样了,这个自己试.
上个完整代码吧,我也不知道蛋老大具体指的什么地方.
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Include <File.au3>
Global $iNumber = 3 ;
Global $X = 380, $Y = 350
;Local $aLines
;If Not _FileReadToArray("wz.txt", $aLines) Then Exit
Local $aLines =
For $i = 1 To $aLines
$aLines[$i] = '第' & $i & '个按钮'
Next
Global $aBut[$aLines] ;按钮总数
Global $iNumber = 3 ;
Global $X = 100, $Y = 30
Opt('GUIOnEventMode', 1)
GUICreate('循环创建按钮', 350, 200)
GUISetOnEvent(-3, '_ButtonEvents')
For $i = 0 To UBound($aBut) -1
$aBut[$i] = GUICtrlCreateButton($aLines[$i+1], $X * Mod($i, $iNumber) + 25, $Y * Floor($i / $iNumber) + 25, 95, 28)
GUICtrlSetOnEvent(-1, '_ButtonEvents')
Next
GUISetState()
While 1
Sleep(250)
WEnd
Func _ButtonEvents()
Switch @GUI_CtrlId
Case -3
Exit
Case $aBut To $aBut
Local $seq = @GUI_CtrlId - $aBut + 1
Local $sPath = 'c:\111\lable' & $seq & '\'
MsgBox(0, '运行:', $sPath & '*.exe')
;local $aFile = _FileListToArray('c:\111\lable' & $seq, '*.exe', 1)
;If @error Then ContinueLoop
;For $i = 1 To $aFile
; Run($sPath & $aFile[$i])
;Next
EndSwitch
EndFunc 回复 6# user3000
lz的意思貌似是要执行不同的exe 回复 6# user3000
多谢可以实现 想要的功能 回复 7# netegg
蛋哥 如果是这样的 话 是不是 还得到txt配置路径 user3000写的差不多了,不过还需要注意一定,那么写的话,一定要注意运行的时间性,就是说一个程序运行的时候,要避免再点击其他按钮 回复 10# netegg
在run的时候 禁用一会其他 lable吗 学习了,感谢分享!! 其实可能有更简单的方式,点击的时候,run(guictrlread($label))估计就行了 回复 14# netegg
多谢 结帖!1
页:
[1]