Что нового

Как скрыть/ отобразить элемент GUI с помощью кнопки?

darkwhite

Новичок
Сообщения
129
Репутация
4
Хотел написать GUI в котором с помощью кнопочки скрывался бы лист и с помощью нее же показывался. Написал вот такой код
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>



$Form = GUICreate("форма",300 , 600, -1, -1, BitOR($GUI_SS_DEFAULT_GUI, $WS_THICKFRAME, $WS_OVERLAPPEDWINDOW, $WS_TILEDWINDOW, $WS_TABSTOP));, $WS_EX_COMPOSITED)

$Btn=GUICtrlCreateButton("кнопка",0,550,100,30)
$listview = GUICtrlCreateListView("элементы", 0, 0,100,300)
for $i=1 to 5
	GUICtrlCreateListViewItem($i, $listview)
Next

GUICtrlSetState($listview,$GUI_HIDE)
GUISetState()



While 1
	Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
		Case $Btn
			if GUICtrlGetState($listview)=$GUI_SHOW then
			GUICtrlSetState($listview,$GUI_HIDE)
		else
			GUICtrlSetState($listview,$GUI_SHOW)
		EndIf
    EndSwitch
WEnd


Показывать показывает но не скрывает в чем ошибка. Подскажите пожалуйста. :smile:
 

Arei

Скриптер
Сообщения
938
Репутация
115
вот
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>



$Form = GUICreate("форма",300 , 600, -1, -1, BitOR($GUI_SS_DEFAULT_GUI, $WS_THICKFRAME, $WS_OVERLAPPEDWINDOW, $WS_TILEDWINDOW, $WS_TABSTOP));, $WS_EX_COMPOSITED)

$Btn=GUICtrlCreateButton("кнопка",0,550,100,30)
$listview = GUICtrlCreateListView("элементы", 0, 0,100,300)
for $i=1 to 5
    GUICtrlCreateListViewItem($i, $listview)
Next

GUICtrlSetState($listview,$GUI_HIDE)
GUISetState()


$w=0
While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Btn
			if $w=0 then

            GUICtrlSetState($listview,$GUI_SHOW)
			$w=1
        else
            GUICtrlSetState($listview,$GUI_HIDE)
			$w=0
        EndIf
    EndSwitch
WEnd
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 472
Репутация
2 401
darkwhite [?]
В том что «GUICtrlGetState» для ListView возвращает номер нажатой колонки (это исключение, и оно описано в справке).
Нужно использовать ControlCommand:

Код:
If ControlCommand($Form, "", $listview, "IsVisible") Then
				GUICtrlSetState($listview, $GUI_HIDE)
			Else
				GUICtrlSetState($listview, $GUI_SHOW)
			EndIf
 
Автор
D

darkwhite

Новичок
Сообщения
129
Репутация
4
Именно так и сделал ) спасибо огромное )
 

Arei

Скриптер
Сообщения
938
Репутация
115
а чем мой способ плохой?
 
Автор
D

darkwhite

Новичок
Сообщения
129
Репутация
4
а чем мой способ плохой?
он не плох -- просто в нем используется еще одна переменная )
именно так я и сделал на скорую руку.
но второй вариант и красивее и правильнее что ли...
 

Arei

Скриптер
Сообщения
938
Репутация
115
ничем он не лучше, а мой проще и следовательно лучше работает=)
 

Arei

Скриптер
Сообщения
938
Репутация
115
т.к мой, и мне кажется менее за мудрёный чем ваш.
 
Автор
D

darkwhite

Новичок
Сообщения
129
Репутация
4
Новый вопросик а подойдет ли этот кодик для проверки видимости дочернего окна ? ) что то у меня не выходит?
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
Arei сказал(а):
т.к мой, и мне кажется менее за мудрёный чем ваш.
Чем меньше переменных, тем лучше. Зачем использовать дополнительную переменную, когда вся информация находится в самом элементе. А если, например, ListView будет скрыт каким-нибудь стороннем приложением...

Вообще, я бы написал так:

Код:
If BitAND(WinGetState(GUICtrlGetHandle($listview)), 2) Then
	GUICtrlSetState($listview, $GUI_HIDE)
Else
	GUICtrlSetState($listview, $GUI_SHOW)
EndIf


darkwhite сказал(а):
Новый вопросик а подойдет ли этот кодик для проверки видимости дочернего окна ? ) что то у меня не выходит?
В отдельную тему.
 
Верх