选择复选框时使用新数组更新列表框

问题描述 投票:0回答:1

我有一个列表框,它显示我的下载文件夹中的文件。但我还有一个过滤器复选框,如果我选择它,它只会将结果优化为 .zip 扩展名。因此,如果我选中该框,它本质上需要清除/重置/刷新数组,使其仅是 .ZIP。但它告诉我错误

the same variable cannot be used for more than 1 control.
但我没有使用它两次。所以我的策略一定是错误的。

Gui, Add, Text, x15 y+50, Downloads Folder | Extension Filters:
Gui, Add, Checkbox, x+20 vFileType gFileFilter1, ZIP    ;Checkbox for filetype filter
Gui, Font, cBlack s9
FileFilter1:
Gui, Add, ListBox, x15 vMyListBox gMyListBox w240 r5
Gui, Add, Button, Default, OK


Gui, submit, nohide 
Downloads:= "C:\Users\me\Downloads\"
if (FileType=1)
  {
    download_filters:= "*.ZIP"
  }
else
  {
    download_filters:= "*.*"
  }
msgbox % Downloads download_filters
; Loops files, applies a sort, sticks results in gui listbox.
FileList := 
Loop files, % Downloads download_filters
  {
    FileList .= A_LoopFileTimeModified "," A_LoopFileName . "|"
  }
Sort, FileList, R D|  ; Sort, reverse order. Use '|' as the Delimiter.
NewFileList .= RegExReplace(FileList,"[0-9]{14},","")
GuiControl,, MyListBox, %NewFileList%

Gui, Show, w525 h500, AHK Super GUI
return

MyListBox:
if (A_GuiEvent != "DoubleClick")
    return
autohotkey
1个回答
0
投票

每次我调用“FileFilter1:”时,它都会尝试添加另一个“ListBox”控件,而不是修改原始控件;将 gui 内容移到标签之外以避免这种情况。第二;要更新列表框(而不是添加到数组),您需要以

"|" VariableName
开头,因此更新列表框的整行将是:
GuiControl ,,MyList,% "|" NewList 

Gui Add,Text,x15 y+50,Downloads Folder | Extension Filters:
Gui Add,Checkbox,x+20 vFileType gFileFilterSub,ZIP
Gui Font,cBlack s9
Gui Add,ListBox,x15 vMyList gMyListBox w240 r5
Gui Add,Button,Default,OK
Gui Submit,NoHide

Downloads:="C:\Users\" A_UserName "\Downloads\"

FileFilterSub:
  Gui Submit,NoHide      ;'Submit' to get the checkbox value first
  If (FileType=1)
    FileFilter:="*.ZIP"
  Else
    FileFilter:="*.*"
  FileList:=""
  Loop Files,% Downloads FileFilter
    FileList.=A_LoopFileTimeModified "," A_LoopFileName "|"
  Sort FileList,R D|
  NewList:=RegExReplace(FileList,"[0-9]{14},","")
  GuiControl ,,MyList,% "|" NewList  ;Start with '|' to overwrite!
  Gui Show,w525 h500,AHK Super GUI
Return

MyListBox:
  If (A_GuiEvent!="DoubleClick")
Return
© www.soinside.com 2019 - 2024. All rights reserved.