Что нового

Имя переменной в параметрах функции

joparezzz

Новичок
Сообщения
65
Репутация
0
Есть такой код:
Код:
#include <Array.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Global $nCheckbox1, $nCheckbox2, $nCheckbox3, $nCheckbox4, $nCheckbox5
Global $nOutput1, $nOutput2, $nOutput3, $nOutput4, $nOutput5

$hGUI = GUICreate('', 350, 250, -1, -1, -1, $WS_CLIPCHILDREN)

Create1()

GUISetState()
While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit

        Case $nCheckbox1
			If BitAND(GUICtrlRead($nCheckbox1), $GUI_CHECKED) Then
                Create2()
            Else
                Delete2()
            EndIf

		Case $nCheckbox2
			If BitAND(GUICtrlRead($nCheckbox2), $GUI_CHECKED) Then
                Create3()
            Else
                Delete3()
            EndIf

		Case $nCheckbox3
			If BitAND(GUICtrlRead($nCheckbox3), $GUI_CHECKED) Then
                Create4()
            Else
                Delete4()
            EndIf

		Case $nCheckbox4
			If BitAND(GUICtrlRead($nCheckbox4), $GUI_CHECKED) Then
                Create5()
            Else
                Delete5()
            EndIf

    EndSwitch
WEnd

Func Create1()
	$nCheckbox1 = GUICtrlCreateCheckbox('', 10, 10, 20, 20)
	$nOutput1 = GUICtrlCreateInput('', 50, 10, 250, 20)
			GUICtrlSetData($nOutput1, "Строка № 1")
EndFunc

Func Create2()
	$nCheckbox2 = GUICtrlCreateCheckbox('', 10, 40, 20, 20)
	$nOutput2 = GUICtrlCreateInput('', 50, 40, 250, 20)
	GUICtrlSetData($nOutput2, "Строка № 2")
EndFunc

Func Delete2()
	GUICtrlDelete($nCheckbox2)
	GUICtrlDelete($nOutput2)
EndFunc

Func Create3()
	$nCheckbox3 = GUICtrlCreateCheckbox('', 10, 70, 20, 20)
	$nOutput3 = GUICtrlCreateInput('', 50, 70, 250, 20)
	GUICtrlSetData($nOutput3, "Строка № 3")
	GUICtrlSetState ($nCheckbox1,  $GUI_DISABLE)
EndFunc

Func Delete3()
	GUICtrlDelete($nCheckbox3)
	GUICtrlDelete($nOutput3)
	GUICtrlSetState ($nCheckbox1,  $GUI_ENABLE)
EndFunc

Func Create4()
	$nCheckbox4 = GUICtrlCreateCheckbox('', 10, 100, 20, 20)
	$nOutput4 = GUICtrlCreateInput('', 50, 100, 250, 20)
	GUICtrlSetData($nOutput4, "Строка № 4")
	GUICtrlSetState ($nCheckbox2,  $GUI_DISABLE)
EndFunc

Func Delete4()
	GUICtrlDelete($nCheckbox4)
	GUICtrlDelete($nOutput4)
	GUICtrlSetState ($nCheckbox2,  $GUI_ENABLE)
EndFunc

Func Create5()
	$nCheckbox5 = GUICtrlCreateCheckbox('', 10, 130, 20, 20)
	$nOutput5 = GUICtrlCreateInput('', 50, 130, 250, 20)
	GUICtrlSetData($nOutput5, "Строка № 5")
	GUICtrlSetState ($nCheckbox3,  $GUI_DISABLE)
EndFunc

Func Delete5()
	GUICtrlDelete($nCheckbox5)
	GUICtrlDelete($nOutput5)
	GUICtrlSetState ($nCheckbox3,  $GUI_ENABLE)
EndFunc


Попытался оптимизировать код и решил имена переменных разместить в параметрах функции:

Код:
#include <Array.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>


Global $nCheckbox1, $nCheckbox2, $nCheckbox3, $nCheckbox4, $nCheckbox5
Global $nOutput1, $nOutput2, $nOutput3, $nOutput4, $nOutput5

$hGUI = GUICreate('', 350, 250, -1, -1, -1, $WS_CLIPCHILDREN)

Create($nCheckbox1, $nOutput1, 10)

GUISetState()
While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit

        Case $nCheckbox1
			If BitAND(GUICtrlRead($nCheckbox1), $GUI_CHECKED) Then
                Create($nCheckbox2, $nOutput2, 40)
            Else

            EndIf

    EndSwitch
WEnd

Func Create($par1, $par2, $y)
	$par1 = GUICtrlCreateCheckbox('', 10, $y, 20, 20)
	$par2 = GUICtrlCreateInput('', 50, $y, 250, 20)
			GUICtrlSetData($par2, "Строка № 1")
EndFunc


Create($nCheckbox1, $nOutput1, 10) создается
но почему то не создается:
Create($nCheckbox2, $nOutput2, 40)
 

gunter123

Продвинутый
Сообщения
159
Репутация
69
Функция Create не передает в переменную ссылку на созданный обьект. Вместо этого она создает копию переменной, которая существует только в теле функции. Используйте ByRef при описании функции.
Код:
Func Create(ByRef $par1, ByRef $par2, $y)
 
Верх