Что нового

Обновление списка в Combobox.

Detre

Новичок
Сообщения
70
Репутация
0
Всем добрейшей ночи, очень возникла потребность обновлять список из файла txt. Раз в 5 минут у меня обновляется список в этом файле и как бы создать кнопку, чтобы перезапускала combobox в GUI? Заранее спасибо экспертам.

Выглядит это у меня следующим образом:
Код:
$sFile=  @ScriptDir & '\rog\ADCE.txt'
$aListFile=FileReadToArray($sFile)

Global $iCombo = GUICtrlCreateCombo(Пустая, 440, 88, 120, 21)

For $i=0 To UBound($aListFile)-1
  GUICtrlSetData(-1,$aListFile[$i])
Next
 

Andr

Новичок
Сообщения
5
Репутация
2
Вроде так...
Код:
#Region INCLUDE
#include <GuiConstantsEx.au3>
#EndRegion INCLUDE

#Region GUI
GUICreate("Sample GUI", 600, 400)
GUISetIcon(@SystemDir & "\mspaint.exe", 0)
#EndRegion GUI

$sFile = @ScriptDir & '\rog\ADCE.txt'
Global $iCombo = GUICtrlCreateCombo("Пустая", 440, 88, 120, 21)
Zapolnenie()

Func Zapolnenie()
   GUICtrlSetData($iCombo, '')
   $aListFile = FileReadToArray($sFile)
   For $i = 0 To UBound($aListFile) - 1
      GUICtrlSetData($iCombo, $aListFile[$i])
   Next
EndFunc

#Region BUTTON
$BTN = GUICtrlCreateButton("Обновить", 10, 330, 100, 30)
#EndRegion BUTTON

#Region GUI MESSAGE LOOP
GUISetState(@SW_SHOW)
While 1
    Switch GUIGetMsg()
         Case $GUI_EVENT_CLOSE
            ExitLoop
         Case $BTN
            Zapolnenie()
    EndSwitch
WEnd
GUIDelete()
#EndRegion GUI MESSAGE LOOP

Ещё есть доп. функции начинающиеся с "_GUICtrlComboBox_...".
 

DyadyaGenya

Знающий
Сообщения
300
Репутация
10
Если человеку нужно оставить строку "Пустая", то так не сработает
как бы создать кнопку
Если вам нужно оставлять строку в списке "Пустая", то сделайте так:
Код:
Global $Button = GUICtrlCreateButton('Обновить', 440, 60, 120, 21)
;......
      Case $Button
         For $i = 0 To UBound($aListFile)-1
            _ArrayDelete($aListFile, UBound($aListFile)-1)
            GUICtrlSendMsg($iCombo, $CB_DELETESTRING, 3, 0)
         Next
         $aListFile=FileReadToArray($sFile)
         For $i=0 To UBound($aListFile)-1
            GUICtrlSetData($iCombo,$aListFile[$i])
         Next
 
Автор
Detre

Detre

Новичок
Сообщения
70
Репутация
0
Если человеку нужно оставить строку "Пустая", то так не сработает

Если вам нужно оставлять строку в списке "Пустая", то сделайте так:
Код:
Global $Button = GUICtrlCreateButton('Обновить', 440, 60, 120, 21)
;......
      Case $Button
         For $i = 0 To UBound($aListFile)-1
            _ArrayDelete($aListFile, UBound($aListFile)-1)
            GUICtrlSendMsg($iCombo, $CB_DELETESTRING, 3, 0)
         Next
         $aListFile=FileReadToArray($sFile)
         For $i=0 To UBound($aListFile)-1
            GUICtrlSetData($iCombo,$aListFile[$i])
         Next
По ходу я делаю что-то неправильно....

Код:
#Region INCLUDE
#include <GUIConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#EndRegion INCLUDE

#Region GUI
GUICreate("Sample GUI", 600, 400)
GUISetIcon(@SystemDir & "\mspaint.exe", 0)
#EndRegion GUI

$sFile = @ScriptDir & '\rog\ADCE.txt'
Global $iCombo = GUICtrlCreateCombo("Пустая", 440, 88, 120, 21)

Global $Button = GUICtrlCreateButton('Обновить', 440, 60, 120, 21)
GUICtrlSetOnEvent(-1, "Zapolnenie")

Func Zapolnenie()
   GUICtrlSetData($iCombo, '')
   $aListFile = FileReadToArray($sFile)
        For $i = 0 To UBound($aListFile)-1
            _ArrayDelete($aListFile, UBound($aListFile)-1)
            GUICtrlSendMsg($iCombo, $CB_DELETESTRING, 3, 0)
        Next
            $aListFile=FileReadToArray($sFile)
            For $i=0 To UBound($aListFile)-1
            GUICtrlSetData($iCombo,$aListFile[$i])
        Next
EndFunc


#Region GUI MESSAGE LOOP
GUISetState(@SW_SHOW)
While 1
    Switch GUIGetMsg()
         Case $GUI_EVENT_CLOSE
            ExitLoop
         Case $Button
            Zapolnenie()
    EndSwitch
WEnd
GUIDelete()
#EndRegion GUI MESSAGE LOOP
 

DyadyaGenya

Знающий
Сообщения
300
Репутация
10
По ходу я делаю что-то неправильно....
Применительно к вашему коду:
Код:
; так должно быть, если хотите, чтобы сразу грузился список в комбо. Если не нужно, чтобы сразу грузился, то оставьте как у вас
$aListFile=FileReadToArray($sFile)
Global $iCombo = GUICtrlCreateCombo("Пустая", 440, 88, 120, 21)
         For $i=0 To UBound($aListFile)-1
            GUICtrlSetData(-1,$aListFile[$i])
         Next

Global $Button = GUICtrlCreateButton('Обновить', 440, 60, 120, 21)
; GUICtrlSetOnEvent(-1, "Zapolnenie")  ; Эта строка закоментирована, лишняя

Func Zapolnenie()
;   GUICtrlSetData($iCombo, '') Эта строка лишняя. По сути она обнуляет весь комбосписок, очищая его полностью, и вместо него позже создается список без строки "Пустая"
   $aListFile = FileReadToArray($sFile)
        For $i = 0 To UBound($aListFile)-1
            _ArrayDelete($aListFile, UBound($aListFile)-1)
            GUICtrlSendMsg($iCombo, $CB_DELETESTRING, 1, 0)  ; тут 1 устанавливает фокус на нужную строку, в данном случае на первую строку "Пустая" путем удаления "по  такую-то строку"
        Next
            $aListFile=FileReadToArray($sFile)
            For $i=0 To UBound($aListFile)-1
            GUICtrlSetData($iCombo,$aListFile[$i])
        Next
EndFunc
 
Последнее редактирование:
Автор
Detre

Detre

Новичок
Сообщения
70
Репутация
0
Применительно к вашему коду:
Код:
; так должно быть, если хотите, чтобы сразу грузился список в комбо. Если не нужно, чтобы сразу грузился, то оставьте как у вас
$aListFile=FileReadToArray($sFile)
Global $iCombo = GUICtrlCreateCombo("Пустая", 440, 88, 120, 21)
         For $i=0 To UBound($aListFile)-1
            GUICtrlSetData(-1,$aListFile[$i])
         Next

Global $Button = GUICtrlCreateButton('Обновить', 440, 60, 120, 21)
; GUICtrlSetOnEvent(-1, "Zapolnenie")  ; Эта строка закоментирована, лишняя

Func Zapolnenie()
;   GUICtrlSetData($iCombo, '') Эта строка лишняя. По сути она обнуляет весь комбосписок, очищая его полностью, и вместо него позже создается список без строки "Пустая"
   $aListFile = FileReadToArray($sFile)
        For $i = 0 To UBound($aListFile)-1
            _ArrayDelete($aListFile, UBound($aListFile)-1)
            GUICtrlSendMsg($iCombo, $CB_DELETESTRING, 1, 0)  ; тут 1 устанавливает фокус на нужную строку, в данном случае на первую строку "Пустая" путем удаления "по  такую-то строку"
        Next
            $aListFile=FileReadToArray($sFile)
            For $i=0 To UBound($aListFile)-1
            GUICtrlSetData($iCombo,$aListFile[$i])
        Next
EndFunc

Хммм. А можно ли сделать перескан? Просто когда я дописываю в файл, то он дописывает в combobox, а если стираю, то он из списка это не убирает.
 

DyadyaGenya

Знающий
Сообщения
300
Репутация
10
Просто когда я дописываю в файл, то он дописывает в combobox, а если стираю, то он из списка это не убирает.
Не знаю, у меня все чистит, если список уменьшается, и добавляет, если увеличивается. Может вы опять что-то не так объеденили? Попробуйте только мой код:
Код:
Global $hGui = GUICreate('Combo', 600,500)
Local $sFile =  @ScriptDir & '\rog\ADCE.txt'
Local $aRecords
$aListFile=FileReadToArray($sFile)

Global $iCombo = GUICtrlCreateCombo('Пустая', 440, 88, 120, 21)
         For $i=0 To UBound($aListFile)-1
            GUICtrlSetData(-1,$aListFile[$i])
         Next
Global $Button = GUICtrlCreateButton('Обновить', 440, 60, 120, 21)
GUISetState()

While 1
       ;Обработка событий в расширенном режиме
    $aMsg = GUIGetMsg(1)

   Switch $aMsg[0]
      Case $GUI_EVENT_CLOSE
      If $aMsg[1] = $hGui Then Exit
      Case $Button
         For $i = 0 To UBound($aListFile)-1
            _ArrayDelete($aListFile, UBound($aListFile)-1)
            GUICtrlSendMsg($iCombo, $CB_DELETESTRING, 1, 0)
         Next
         $aListFile=FileReadToArray($sFile)
         For $i=0 To UBound($aListFile)-1
            GUICtrlSetData($iCombo,$aListFile[$i])
         Next
   EndSwitch
WEnd
 
Автор
Detre

Detre

Новичок
Сообщения
70
Репутация
0
Большое спасибо за помощь. Для себя выбрал оптималку))) Решил закинуть как отдельную функцию, ибо в моем фарше норм так рукоблудить :rofl:

Код:
Func _Button()

         For $i = 0 To UBound($aListFile)-1
            _ArrayDelete($aListFile, UBound($aListFile)-1)
            GUICtrlSendMsg($iCombo, $CB_DELETESTRING, 1, 0)
         Next
         $aListFile=FileReadToArray($sFile)
         For $i=0 To UBound($aListFile)-1
            GUICtrlSetData($iCombo,$aListFile[$i])
         Next

Endfunc
 
Верх