Listview Dúvida Topic is solved

Tire suas dúvidas sobre programação em AutoHotkey

Moderator: Gio

thalesduarte
Posts: 95
Joined: 13 Sep 2021, 06:08

Listview Dúvida

12 Sep 2022, 15:11

Olá, boa tarde.

Tenho uma dúvida a respeito de listview (famosa tabela na gui do ahk).


Como faço para manipular listviews entre guis?

Tenho 2GUIS, onde cada uma tem uma listview diferente.

E dentro dessa listview tenho botões que interagem entre elas.

A minha dúvida é:
Como posso fazer para ao clicar em um botão na gui 1, atualizar valores da listview da gui2.

Grato pela atenção!
User avatar
Gio
Posts: 1247
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: Listview Dúvida  Topic is solved

12 Sep 2022, 16:20

Boa tarde Thalesduarte.

Você deve observar duas coisas:

:arrow: Primeira coisa:

As funções de listview (tais como Lv_add(), Lv_modifycol(), etc) operam sempre sobre a GUI padrão atual, e isso pode ser redefinido a qualquer momento usando o comando GUI, Default.

Por exemplo, uma linha Gui, 3: Default faria com que toda e qualquer chamada à uma função de ListView dali em diante fosse direcionada à GUI 3.

OBS: Esta definição é local, sendo assim sugiro que você redefina a GUI desejada como Default explicitamente logo antes de quaisquer novos agrupamentos de chamadas à funções listView para evitar comportamentos inesperados.

Exemplo:

Code: Select all

Gui, 3: Default ; Veja como defino explicitamente aqui nesta linha que quero que as funções abaixo sejam direcionadas à GUI 3...
Lv_Add("", 1, 2, 3)
Lv_ModifyCol(1, 120)
Lv_ModifyCol(2, 100)
Lv_ModifyCol(3, 100)

:arrow: Segunda coisa:

Uma GUI também pode ter mais de uma listview, então se você precisar, saiba que também pode definir QUAL LISTVIEW DA MESMA GUI será a listview padrão daquela GUI (de modo que às chamadas subsequentes à funções listview operem naquela listview específica se aquela GUI for a GUI padrão atual). Para isso, atribuia uma v-variável a cada ListView e depois use o comando GUI com o subcomando ListView e depois o nome da variável da GUI desejada para redefinir qualquer das listviews como a listview padrão daquela GUI.

Por exemplo, no código abaixo eu tenho duas listviews e dois botões diferentes. Atribui à primeira a v-variável "ViewPrimeira" e depois atribui à segunda a v-variável "ViewSegunda". Com isso, pode usar o comando Gui, Listview, ViewPrimeira para direcionar as chamadas de funções à listview à primeira ListView por exemplo. Com isso criei dois botões, sendo que um escreve uma nova linha na listview 1, e o outro escreve na listview 2.



Code: Select all

#SingleInstance, Force

Gui, 2: Add, ListView, x20 y20 w500 h200 vViewPrimeira, Codigo|Nome|Telefone ; Veja como atribui uma v-variável de nome ViewPrimeira à esta listview específica...
Gui, 2: Add, Button, x20 y460 gADICIONAR_NA_PRIMEIRA, PRIMEIRA

Gui, 2: Add, Listview, x20 y240 w500 h200 vViewSegunda, Data|Hora|Usuario ; Veja como atribui OUTRA v-variável, desta vez com nome ViewSegunda, à esta listview específica...
Gui, 2: Add, Button, x100 y460 gADICIONAR_NA_SEGUNDA, SEGUNDA

Gui, 2: Show, w550 h500, Exemplo com duas listviews
Return


ADICIONAR_NA_PRIMEIRA:
Gui, 2: Default ; Começo definindo que a Gui 2 será a gui padrão atual.
Gui, 2: ListView, ViewPrimeira ; Depois, defino que a listview com a v-variável ViewPrimeira será a listview padrão da GUI atual.
Lv_Add("", "1", "Fulano", "9999-9999") ; Daí é só escrever ou fazer o que quiser que já sei que vai acertar justo na primeira listview da gui 2...
Return

ADICIONAR_NA_SEGUNDA:
Gui, 2: Default ; Começo definindo que a Gui 2 será a gui padrão atual.
Gui, 2: ListView, ViewSegunda ; Depois, defino que a listview com a v-variável ViewSegunda será a listview padrão da GUI atual.
Lv_Add("", "12/09/2022", "16:17", "Beltrano") ; Daí é só escrever ou fazer o que quiser que já sei que vai acertar justo na segunda listview da gui 2...
Return

Veja nos comentários do código o passo-a-passo que usei para que cada botão escreva na sua listaview específica.


Por fim, o código abaixo seria a resposta mais direta à pergunta: criamos duas guis (2 e 3) e depois fazemos com que o botão da GUI 3 insira dados na listview da GUI 2. Isso será possível justamente porque colocamos comandos na g-label do botão da GUI 3 que tornam a GUI 2 e sua listview os padrões daquela g-label.

Code: Select all

#SingleInstance, Force

Gui, 2: Add, ListView, x20 y20 w500 h200 vViewPrimeira, Codigo|Nome|Telefone ; Veja como atribui uma v-variável de nome ViewPrimeira à esta listview específica...
Gui, 2: Show, w550 h500, GUI 2

Gui, 3: Add, Text, x20 y20, Clique no botão para escrever na listview da OUTRA tela (GUI 2)
Gui, 3: Add, Button, x100 y50 gADICIONAR_NA_2, ADICIONAR
Gui, 3: Show, w550 h100, GUI 3
Return


ADICIONAR_NA_2: ; Esta label está atrelada ao botão da GUI 3 (sim, da TRÊS).
Gui, 2: Default ; Começo definindo que a Gui 2 será a gui padrão atual.
Gui, 2: ListView, ViewPrimeira ; Depois, defino que a listview com a v-variável ViewPrimeira será a listview padrão da GUI atual.
Lv_Add("", "1", "Fulano", "9999-9999") ; Daí é só escrever ou fazer o que quiser que já sei que vai acertar justo na primeira listview da gui 2...
Return
Espero ter ajudado, se ainda tiver alguma dúvida, basta postar abaixo.
thalesduarte
Posts: 95
Joined: 13 Sep 2021, 06:08

Re: Listview Dúvida

12 Sep 2022, 16:36

Muito obrigado pelo esclarecimento @gio, seus conhecimentos são de grande fortuna nesse fórum, rsrs.

Return to “Ajuda e Suporte Geral”

Who is online

Users browsing this forum: No registered users and 8 guests