找回密码  加入

AUTOIT CN

搜索
查看: 98|回复: 9

[网络通信] 请教ListView 控件项目操作问题“已解决”

[复制链接]
发表于 2021-9-14 23:26:10 | 显示全部楼层 |阅读模式
本帖最后由 nuoyan 于 2021-9-16 19:31 编辑

复制代码
#include <File.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <StaticConstants.au3>
#include <TreeViewConstants.au3>
#include <WindowsConstants.au3>
Opt("GUIDataSeparatorChar", ",")
DirCreate(@ScriptDir & "\项目1")
DirCreate(@ScriptDir & "\项目2")
IniWrite(@ScriptDir & "\项目1\Config.ini", "项目", "数据", "项目一测试1,项目一测试2,项目一测试3")
IniWrite(@ScriptDir & "\项目2\Config.ini", "项目", "数据", "项目二测试4,项目二测试5,项目二测试6")
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 610, 511)
$TreeView1 = GUICtrlCreateTreeView(16, 16, 161, 473, BitOR($TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS), $WS_EX_CLIENTEDGE)
$generalitem1 = GUICtrlCreateTreeViewItem("项目列表", $TreeView1)
GUICtrlSetColor(-1, 0x0000C0)

$FileList = _FileListToArray(@ScriptDir & "\", "*", 2)
For $y = 1 To $FileList[0]
$Child = GUICtrlCreateTreeViewItem($FileList[$y], $generalitem1)
Next
$Label1 = GUICtrlCreateLabel("Label1", 256, 40, 108, 25)
$ListView1 = GUICtrlCreateListView("项目数据        ", 232, 80, 153, 281)
$Input1 = GUICtrlCreateInput("", 232, 376, 153, 21)
$Button1 = GUICtrlCreateButton("添加", 232, 416, 75, 25)
$Button2 = GUICtrlCreateButton("删除", 320, 416, 75, 25)
GUICtrlSetState($generalitem1, BitOR($GUI_EXPAND, $GUI_DEFBUTTON))
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
  Case $GUI_EVENT_CLOSE
   Exit
  Case $Child - $FileList[0] To $Child
   If GUICtrlRead($nMsg, 1) = "项目列表" Then
    GUICtrlSetData($Label1, "")
   Else
    GUICtrlSetData($Label1, GUICtrlRead($nMsg, 1))
    $Single = IniRead(@ScriptDir & "\" & GUICtrlRead($nMsg, 1) & "\Config.ini", "项目", "数据", "")
    If $Single <> "" Then
     $aDays = StringSplit($Single, ",")
     For $a = 1 To $aDays[0]
      GUICtrlCreateListViewItem($aDays[$a], $ListView1)
     Next
    EndIf
   EndIf
  Case $Button1
   If GUICtrlRead($Input1, 0) = "" Then
    MsgBox(16, "错误", "请输入要添加的数据。")
   Else
    GUICtrlCreateListViewItem(GUICtrlRead($Input1, 0), $ListView1)
   EndIf
  Case $Button2
   GUICtrlDelete(GUICtrlRead($ListView1))
   MsgBox(64, "提示", "删除成功。")
EndSwitch
WEnd



请教下,项目1和项目2之间切换的时候,怎么才能先清空ListView 控件之前读取的项目,还有添加和删除操作要怎么把 ListView 控件当前剩余显示的子项读取出来以逗号分隔的形式重新写回对应的INI文件。



发表于 2021-9-15 08:46:30 | 显示全部楼层
老生常谈了,论坛上关于 ListView 操作的示例有很多,楼主可以搜索下。
发表于 2021-9-15 09:43:48 | 显示全部楼层
操作:
1:清空列表=GUICtrlSendMsg($ListView1, $LVM_DELETEALLITEMS, 0, 0)
2:判断树型项目是否等于项目1或项目2
3:删除配置文件
4:读取ListView1列表数据
5:重新写入。
发表于 2021-9-17 10:21:03 | 显示全部楼层
chzj589 发表于 2021-9-15 09:43
操作:
1:清空列表=GUICtrlSendMsg($ListView1, $LVM_DELETEALLITEMS, 0, 0)
2:判断树型项目是否等于项 ...


本帖子中包含更多资源

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

x
 楼主| 发表于 2021-9-17 12:49:21 | 显示全部楼层
本帖最后由 nuoyan 于 2021-9-17 12:57 编辑

现在就是卡在 点击添加后,将列表中返回的数组文本  “项目二测试4”  “项目二测试5”
“项目二测试6”   “BBBB”   以逗号分隔的形式再写回INI文件

比如像下面这个例子 ,ini 写入的结果如何改为下面这种格式

[111]
222=a,b,c,d,e

  1. #include <ButtonConstants.au3>
  2. #include <GUIConstantsEx.au3>
  3. #include <ListViewConstants.au3>
  4. #include <WindowsConstants.au3>
  5. #include <GuiListView.au3>
  6. #include <array.au3>
  7. #include <File.au3>
  8. #include <Array.au3>
  9. #Region ### START Koda GUI section ### Form=
  10. $Form1 = GUICreate("Form1", 220, 395)
  11. $ListView1 = GUICtrlCreateListView("row", 30, 20, 156, 326)
  12. $ListView1_0 = GUICtrlCreateListViewItem("a", $ListView1)
  13. $ListView1_1 = GUICtrlCreateListViewItem("b", $ListView1)
  14. $ListView1_2 = GUICtrlCreateListViewItem("c", $ListView1)
  15. $ListView1_3 = GUICtrlCreateListViewItem("d", $ListView1)
  16. $ListView1_4 = GUICtrlCreateListViewItem("e", $ListView1)
  17. $Button1 = GUICtrlCreateButton("确定", 70, 355, 65, 21)
  18. GUISetState(@SW_SHOW)
  19. #EndRegion ### END Koda GUI section ###

  20. While 1
  21.                 $nMsg = GUIGetMsg()
  22.         Switch $nMsg
  23.                                      Case $GUI_EVENT_CLOSE
  24.                                                          Exit
  25.                                      Case $Button1
  26.                                                       Local $aArray[_GUICtrlListView_GetItemCount($ListView1)][_GUICtrlListView_GetColumnCount($ListView1)]
  27.                                                       For $i = 0 To _GUICtrlListView_GetItemCount($ListView1) - 1
  28.                                                                        Local $aItem = _GUICtrlListView_GetItemTextArray($ListView1, $i)
  29.                                        For $j = 1 To UBound($aItem) - 1

  30.                                                                                          $aArray[$i][$j - 1] = $aItem[$j]

  31.                                                                       Next
  32.                               Next

  33.                                              IniWrite(@ScriptDir & "\111.ini", "111", "222", _ArrayToString($aArray, "", 0, UBound($aArray) - 1))

  34.         EndSwitch
  35. WEnd








复制代码



发表于 2021-9-17 12:51:55 | 显示全部楼层
nuoyan 发表于 2021-9-17 12:49
现在就是卡在 点击添加后,将列表中返回的数组文本  “项目二测试4”  “项目二测试5”
“项目二测试6 ...

3:删除配置文件
4:读取ListView1列表数据
5:重新写入。
 楼主| 发表于 2021-9-17 13:01:11 | 显示全部楼层
chzj589 发表于 2021-9-17 12:51
3:删除配置文件
4:读取ListView1列表数据
5:重新写入。

要的结果不是删除配置文件,,读ListView1 已经读到了。返回的的值是数组值,怎么将数组值再以逗号相隔的形式写入到回去。
发表于 2021-9-17 13:52:14 | 显示全部楼层
nuoyan 发表于 2021-9-17 13:01
要的结果不是删除配置文件,,读ListView1 已经读到了。返回的的值是数组值,怎么将数组值再以逗号相隔的 ...

Local $cont = _GUICtrlListView_GetItemCount($ListView1);取得数组的行列数
Local $h1 = ""
For $id = 0 To $cont - 1
        $str = _GUICtrlListView_GetItemTextArray($ListView1, $id)
        $h1 &= $str[1] & ","
Next
Local $sString = StringTrimRight($h1, 1) ; 删除字符串右起 1个字符.
IniWrite(@ScriptDir & "\项目1\Config.ini", "项目", "数据", $sString)
发表于 2021-9-17 22:11:32 | 显示全部楼层
nuoyan 发表于 2021-9-17 13:01
要的结果不是删除配置文件,,读ListView1 已经读到了。返回的的值是数组值,怎么将数组值再以逗号相隔的 ...

我想你还没有理解我的:
2:判断树型项目是否等于项目1或项目2。没有判断项目1或项目2,就无法得到配置文件的路径
3:删除配置文件。不删除的话,如是增加可以写入。如是减少那就没用了。
4:读取ListView1列表数据
5:重新写入配置文件。
发表于 2021-9-17 22:41:27 | 显示全部楼层
nuoyan 发表于 2021-9-17 13:01
要的结果不是删除配置文件,,读ListView1 已经读到了。返回的的值是数组值,怎么将数组值再以逗号相隔的 ...

把你的代码改一下
  1. #include <File.au3>
  2. #include <ButtonConstants.au3>
  3. #include <EditConstants.au3>
  4. #include <GUIConstantsEx.au3>
  5. #include <GUIListView.au3>
  6. #include <ListViewConstants.au3>
  7. #include <StaticConstants.au3>
  8. #include <TreeViewConstants.au3>
  9. #include <WindowsConstants.au3>
  10. Opt("GUIDataSeparatorChar", ",")
  11. DirCreate(@ScriptDir & "\项目1")
  12. DirCreate(@ScriptDir & "\项目2")
  13. ;IniWrite(@ScriptDir & "\项目1\Config.ini", "项目", "数据", "项目一测试1,项目一测试2,项目一测试3")
  14. ;IniWrite(@ScriptDir & "\项目2\Config.ini", "项目", "数据", "项目二测试4,项目二测试5,项目二测试6")
  15. #Region ### START Koda GUI section ### Form=
  16. $Form1 = GUICreate("Form1", 610, 511)
  17. $TreeView1 = GUICtrlCreateTreeView(16, 16, 161, 473, BitOR($TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS), $WS_EX_CLIENTEDGE)
  18. $generalitem1 = GUICtrlCreateTreeViewItem("项目列表", $TreeView1)
  19. GUICtrlSetColor(-1, 0x0000C0)
  20. $FileList = _FileListToArray(@ScriptDir & "", "*", 2)
  21. For $y = 1 To $FileList[0]
  22.         $Child = GUICtrlCreateTreeViewItem($FileList[$y], $generalitem1)
  23. Next
  24. $Label1 = GUICtrlCreateLabel("Label1", 256, 40, 108, 25)
  25. $ListView1 = GUICtrlCreateListView("项目数据        ", 232, 80, 153, 281)
  26. $Input1 = GUICtrlCreateInput("", 232, 376, 153, 21)
  27. $Button1 = GUICtrlCreateButton("添加", 232, 416, 75, 25)
  28. $Button2 = GUICtrlCreateButton("删除", 320, 416, 75, 25)
  29. GUICtrlSetState($generalitem1, BitOR($GUI_EXPAND, $GUI_DEFBUTTON))
  30. GUISetState(@SW_SHOW)
  31. #EndRegion ### END Koda GUI section ###
  32. While 1
  33.         $nMsg = GUIGetMsg()
  34.         Switch $nMsg
  35.                 Case $GUI_EVENT_CLOSE
  36.                         Exit
  37.                 Case $Child - $FileList[0] To $Child
  38.                         If GUICtrlRead($nMsg, 1) = "项目列表" Then
  39.                                 GUICtrlSetData($Label1, "")
  40.                         Else
  41.                                 GUICtrlSetData($Label1, GUICtrlRead($nMsg, 1))
  42.                                 $Single = IniRead(@ScriptDir & "" & GUICtrlRead($nMsg, 1) & "\Config.ini", "项目", "数据", "")
  43.                                 If $Single <> "" Then
  44.                                         $aDays = StringSplit($Single, ",")
  45.                                         GUICtrlSendMsg($ListView1, $LVM_DELETEALLITEMS, 0, 0)
  46.                                         For $a = 1 To $aDays[0]
  47.                                                 GUICtrlCreateListViewItem($aDays[$a], $ListView1)
  48.                                         Next
  49.                                 EndIf
  50.                         EndIf
  51.                 Case $Button1
  52.                         If GUICtrlRead($Input1, 0) = "" Then
  53.                                 MsgBox(16, "错误", "请输入要添加的数据。")
  54.                         Else
  55.                                 GUICtrlCreateListViewItem(GUICtrlRead($Input1, 0), $ListView1)
  56.                         EndIf
  57.                         $Lab=GUICtrlRead($Label1)
  58.                         FileDelete(@ScriptDir & "" & $Lab & "\Config.ini")
  59.                         Local $cont = _GUICtrlListView_GetItemCount($ListView1);取得数组的行列数
  60.                         Local $h1 = ""
  61.                         For $id = 0 To $cont - 1
  62.                                 $str = _GUICtrlListView_GetItemTextArray($ListView1, $id)
  63.                                 $h1 &= $str[1] & ","
  64.                         Next
  65.                         Local $sString = StringTrimRight($h1, 1) ; 删除字符串右起 1个字符.
  66.                         IniWrite(@ScriptDir & "" & $Lab & "\Config.ini", "项目", "数据", $sString)
  67.                 Case $Button2
  68.                         GUICtrlDelete(GUICtrlRead($ListView1))
  69.                         MsgBox(64, "提示", "删除成功。")
  70.                         $Lab=GUICtrlRead($Label1)
  71.                         FileDelete(@ScriptDir & "" & $Lab & "\Config.ini")
  72.                         Local $cont = _GUICtrlListView_GetItemCount($ListView1);取得数组的行列数
  73.                         Local $h1 = ""
  74.                         For $id = 0 To $cont - 1
  75.                                 $str = _GUICtrlListView_GetItemTextArray($ListView1, $id)
  76.                                 $h1 &= $str[1] & ","
  77.                         Next
  78.                         Local $sString = StringTrimRight($h1, 1) ; 删除字符串右起 1个字符.
  79.                         IniWrite(@ScriptDir & "" & $Lab & "\Config.ini", "项目", "数据", $sString)
  80.         EndSwitch
  81. WEnd
复制代码



您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2021-9-27 20:27 , Processed in 1.031231 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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