Что нового

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

darkwhite

Знающий
Сообщения
129
Репутация
5
Хотел написать 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,673
Репутация
2,486
darkwhite [?]
В том что «GUICtrlGetState» для ListView возвращает номер нажатой колонки (это исключение, и оно описано в справке).
Нужно использовать ControlCommand:

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

darkwhite

Знающий
Сообщения
129
Репутация
5
Именно так и сделал ) спасибо огромное )
 
Автор
D

darkwhite

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

Arei

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

Arei

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

darkwhite

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

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Arei сказал(а):
т.к мой, и мне кажется менее за мудрёный чем ваш.

Чем меньше переменных, тем лучше. Зачем использовать дополнительную переменную, когда вся информация находится в самом элементе. А если, например, ListView будет скрыт каким-нибудь стороннем приложением...

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

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


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

В отдельную тему.
 
Верх