Что нового

[Данные, строки] Как обновить строки комбобокса?

general66

Пришел увидел наследил
Сообщения
211
Репутация
3
Подскажите пожалуйста Как обновить строки комбобокса , если они хранятся в ini файле в таком формате [Combo1]
items=item1|item2|item3
, а добовляю я значения в ini при помощи этого скрипта

Код:
$sOld = IniRead("filename", "Combo1", "items", "")
$sNew = "item4"

IniWrite("filename", "Combo1", "items", $sOld & "|" & $sNew)


подскажите какую функцию нужно использовать чтоб после добавления в ini item4 он автоматически появлялся в комбобоксе :blink:
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
general66
обновление скрипта при нажатии кнопки "добавить". типа рестарта
Код:
Func _ScriptRestart($fExit = 1)
	Local $Pid
	If Not $__Restart Then
		If @compiled Then
			$Pid = Run(@ScriptFullPath & ' ' & $CmdLineRaw, @ScriptDir, Default, 1)
		Else
			$Pid = Run(@AutoItExe & ' "' & @ScriptFullPath & '" ' & $CmdLineRaw, @ScriptDir, Default, 1)
		EndIf
		If @error Then
			Return SetError(@error, 0, 0)
		EndIf
		StdinWrite($Pid, @AutoItPID)
	EndIf
	$__Restart = 1
	If $fExit Then
		Sleep(50)
		Exit
	EndIf
	Return 1
EndFunc
 
Автор
G

general66

Пришел увидел наследил
Сообщения
211
Репутация
3
joiner [?]
обновление скрипта при нажатии кнопки "добавить". типа рестарта

вылетает с ошибкой
Код:
D:\Program Files\AutoIt3\Include\Func.au3 (24) : ==> Variable used without being declared.:
If Not $__Restart Then
If Not ^ ERROR

а эта функция полностью перегружает весь скрипт со всеми GUI?
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
да полностью. объяви переменную вначале скрипта. в глобальные.
вобщем пробуй так . без рестарта. при нажатии кнопки происходит запись в файл и появляется строка в комбо
Код:
#include <array.au3>
#include <File.au3>
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Global $Combo1, $sLines
_combo()
$Form1 = GUICreate("Form1", 318, 151, 192, 124)
$Input1 = GUICtrlCreateInput("Input1", 48, 32, 145, 21)
$Button1 = GUICtrlCreateButton("Button1", 208, 32, 75, 25)
$Combo1 = GUICtrlCreateCombo("Combo1", 48, 72, 145, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL))
GUISetState(@SW_SHOW)
GUICtrlSetData($Combo1, $sLines)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button1
            FileWrite('log.txt', GUICtrlRead($Input1) & @CRLF)
            _combo()
    EndSwitch
WEnd

Func _combo()
    Dim $aLines
    _FileReadToArray("log.txt", $aLines)
    $sLines = _ArrayToString($aLines, '|', 1)
    GUICtrlSetData($Combo1, '')
    GUICtrlSetData($Combo1, $sLines)
EndFunc   ;==>_combo



или с рестартом


Код:
#include <array.au3>
#include <File.au3>
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Global $Combo1, $sLines,$__Restart
_combo()
$Form1 = GUICreate("Form1", 318, 151, 192, 124)
$Input1 = GUICtrlCreateInput("Input1", 48, 32, 145, 21)
$Button1 = GUICtrlCreateButton("Button1", 208, 32, 75, 25)
$Combo1 = GUICtrlCreateCombo("Combo1", 48, 72, 145, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL))
GUISetState(@SW_SHOW)
GUICtrlSetData($Combo1, $sLines)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button1
            FileWrite('log.txt', GUICtrlRead($Input1) & @CRLF)
            ;_combo()
			_ScriptRestart()
    EndSwitch
WEnd

Func _combo()
    Dim $aLines
    _FileReadToArray("log.txt", $aLines)
    $sLines = _ArrayToString($aLines, '|', 1)
    ;GUICtrlSetData($Combo1, '')
    GUICtrlSetData($Combo1, $sLines)
EndFunc   ;==>_combo
Func _ScriptRestart($fExit = 1)
    Local $Pid
    If Not $__Restart Then
        If @compiled Then
            $Pid = Run(@ScriptFullPath & ' ' & $CmdLineRaw, @ScriptDir, Default, 1)
        Else
            $Pid = Run(@AutoItExe & ' "' & @ScriptFullPath & '" ' & $CmdLineRaw, @ScriptDir, Default, 1)
        EndIf
        If @error Then
            Return SetError(@error, 0, 0)
        EndIf
        StdinWrite($Pid, @AutoItPID)
    EndIf
    $__Restart = 1
    If $fExit Then
        Sleep(50)
        Exit
    EndIf
    Return 1
EndFunc
 

XpycT

Скриптер
Сообщения
380
Репутация
133
general66
Код:
$sOld = IniRead("filename", "Combo1", "items", "")
$sNew = "item4"

IniWrite("filename", "Combo1", "items", $sOld & "|" & $sNew)
_GUICtrlComboBox_ResetContent("Combo1")
GUICtrlSetData("Combo1", $sOld & "|" & $sNew)
 
Автор
G

general66

Пришел увидел наследил
Сообщения
211
Репутация
3
joiner [?]
да полностью. объяви переменную вначале скрипта.

спасибо помогло :ok:

XpycT

хороший вариант при небольшой доработке не уступает выше описанным спасибо за идею :ok:
 
Верх