Utilização da Grade Vinculada aos dados: DbGrid.
|
Conteúdo
Introdução.
A Grade Vinculada aos dados - DbGrid oferece um meio para visualizar vários
registros ao mesmo tempo. Assemelha-se ao commando Browse usado no Clipper/FoxPro
e ao modo tabela do Access.
O seu primo pobre no VB seria o controle Grid, e, apenas para dimensionar a dife-
rença ,o Grid está limitado a 16352 linhas e 5450 colunas no Dbgrid a
quantidade de linhas esta condicionada aos recursos do sistema e a 1700 colunas,
sem contar que o desempenho do Dbgrid e bem superior ao do Grid.
Enquanto o Grid precisa ser configurado quase que totalmente via código, para usar
o Dbgrid basta arrastar o ícone do Controle para o seu formulário e definir a
propriedade DataSource para identificar o controle de dados que contém os dados
que você quer exibir, e pronto, a grade exibe todos os campos dos registros do
recordset.
Nota:Para preservar recursos do sistema use uma instrução SQL na propriedade
Recordsource do controle de dados que o DbGrid irá utilizar.
Conteúdo
Utilização e configuração.
Vejamos passo a passo como utilizar o Dbgrid com o controle de dados vinculados
- Data Control.
fig1. |
De início selecione o objeto controle de dados na
Toolbox do Visual Basic e acrescente-o ao seu formulário.(Fig.1) |
Defina a seguir as propriedades:
-
Name - Nome do Controle (O padrão é data1)
e Caption - Especifica o nome que aparece no controle de dados.
-
DatabaseName - Para bancos de dados do Access, representa
o nome do arquivo do banco de dados, inclusive o nome compleo do caminho.
(Para banco de dados diferentes do Access é necessário
informar o nome do caminho até o subdiretório dos dados.Ex-Para
padrão Dbase : DatabaseName=c:\dir)
-
RecordSource - Especifica as informações que deseja
obter no banco de dados - uma tabela , uma instrução SQL
.
-
RecordsetType - Se deseja criar um 2-snapshot ou um acessar
uma 0-table altere esta propriedade, pois o padrão é
1-dynaset.
-
Connect - Necessária quando o banco de dados não for
do Access. Ex - Para banco de dados padrão Dbase - Connect=dBASEIII.
|
fig.4 |
A seguir selecione o ícone
do DBGrid na ToolBox e arreste-o até o seu form dimensionando
como na fig.4. ao lado. |
fig.5 |
Finalmente defina a propriedade DataSource vinculado-a
ao controle de dados configurado anteriormente.fig.5. |
Para permitir a edição, inclusão e exclusão
de registros na grade você deve definir como True as propriedades
AllowAddNew , AllowUpdate e AllowDelete. Isto pode
ser feito através da folha de propriedades do DBgrid (fig.6), onde
podemos tambem especificar opções avançadas de tratamento
do Recordset sem uma linha de código sequer.
fig.6 |
Conteúdo
Projeto - Controle Financeiro..
Chega de conceitos, vamos colocar em prática tudo isto em um projeto
simples, um pequeno controle financeiro que você depois pode aperfeiçoar.
Então mão a obra:
-objetivo: Controlar a movimentação de contas bancárias.
-Constituição:
-
Um formulário MDI para o menu de opções com botões
de ícones.
-
Um formulário para cadastrar : Clientes , Contas , Transações.
-
Um formulário para visualizar a movimentação de determinada
conta.
-
Um formulário para incluir dados.
-
Um formulário para excluir dados.
-
Um formulário para alterar dados.
-
Um módulo para código utilizado por toda a aplicação.
1-Vamos iniciar com a criação do menu, simples na verdade,
mas que serve para os nossos propósitos. Fica a seu critério
incrementá-lo. Vamos lá. -Inicie o VB e acione a opção
Insert->MDI Form para inserir um formulário MDI que conterá
os demais formulários do projeto. -O nosso formulário deverá
ter o aspecto mostrado na figura 1.0 abaixo:
fig 1.0 |
Neste formulário temos os seguintes
controles:
-1 controle SSPanel
-5 botões SSCommand
Além disso temos um menu feito
no Editor de Menus do Visual
Basic.
|
-Insira os controles no formulário e configure suas propriedades
como indicado a seguir na tabela 1.0: Tabela 1.0 - Objetos e
propriedades do form frmmenu. ----------------------------------------------------------------------------
Objeto Propriedade Configuração ----------------------------------------------------------------------------
MDIForm Name frmmenu Picture fig 1.0 ----------------------------------------------------------------------------
(*)SSCommand Name SSCommand1(0) Picture fig 1.0 - Clientes,Contas,Transações
BevelWidth 1 ---------------------------------------------------------------------------
SSCommand Name SSCommand1(1) Picture fig 1.0 - Gerenciar o movimento BevelWidth
1 ---------------------------------------------------------------------------
SSCommand Name SSCommand1(2) Picture fig 1.0 - Relatórios do Sistema
BevelWidth 1 ---------------------------------------------------------------------------
SSCommand Name SSCommand1(3) Picture fig 1.0 - Ajuda do Sistema BevelWidth
1 ---------------------------------------------------------------------------
SSCommand Name SSCommand1(4) Picture fig 1.0 - Sair do Sistema BevelWidth
1 ---------------------------------------------------------------------------
SSPanel Caption "" Name painel Align 1-Align Top BevelWidth 1 BevelInner
0-None BevelOuter 2-Raised ---------------------------------------------------------------------------
(*)Constituem um "control array" - Controles com o mesmo nome e do mesmo
tipo, dotados de um índice identificador. (**)Para usar o Editor
de Menus do VB pressione CTRL+E e informe o nome que deseja para o menu
na propriedade Caption e na propriedade Name informe o nome
de referência do menu. Para criar subitens clique na seta para
direita repita o passo anterior e a seguir no botão Next
para ir para o próximo subitem. Obs:Para sublinhar a primeira letra
do nome do menu insira o caractere & antes da letra. Ex: &Cadastros
-> exibe Cadastros. 2-Agora basta atribuir o código a cada
botão de comando , no nosso caso so usaremos o botão que
gerencia o movimento e o botão para sair do sistema. -No botão
que gerencia o movimento - Menu Movimento - iremos carregar o formulário
frmtrans. -No botão para sair do Sistema inserimos o código
que encerra a aplicação.Veja abaixo:
Private Sub SSCommand1_Click(Index As Integer)
Select Case Index
Case 0 'botão 1 - Cadastramentos (por sua conta)
Case 1 'Gerencia movimento
frmtransa.Show
Case 2 'Relatórios
Case 3 'Ajuda
Case 4 'Sair da aplicação
end
End Select
End Sub
|
Conteúdo
Controle Financeiro - Definição das
tabelas..
Vamos agora definir o banco de dados e as tabelas utilizadas pelo sistema.
A princípio o sistema usará as seguintes tabelas:
- BANCO.MDB - será o banco de dados do nosso sistema.
- tblcli - Tabela de cadastro dos clientes.
- tblcontas - Tabela de cadastro das contas a controlar.
- tblcodtrans - Tabela de cadastro dos códigos das transações realizadas.
- tbltrans - Tabela onde será registrada toda a transação realizada.
Vejamos agora a definição dos campos de cada tabela e a criação do banco de dados.
1-Crie o seu banco de dados utilizando o Data Manager ou use
o Microsoft Access e grave-o com o nome de BANCO.MDB.
2-Crie uma tabela com o nome de tblcli com a seguinte estrutura:
----------------------------------------------------
Nome do Campo Tipo de Dados Tamanho
----------------------------------------------------
COD_CLI LONG INTEGER(*)
DES_CLI CARACTER 30
----------------------------------------------------
(*)Como cada cliente deve ter um codigo único garantindo assim a exata
identificação do mesmo, defina o tipo de dados para o campo código como
LONG INTEGER , e ative o atributo Counter e a opção Required.
3-Crie uma tabela com o nome de tblcontas com a seguinte estrutura:
----------------------------------------------------
Nome do Campo Tipo de Dados Tamanho
----------------------------------------------------
COD_CLI LONG
COD_CONTA LONG 30
DES_CONTA TEXT 30
----------------------------------------------------
-Defina um índice para os campos cod_cli e cod_conta com o nome de cliconta
e com as seguintes propriedades: Unique, Primary index , Required.
4-Crie uma tabela com o nome de tblcodtrans com a seguinte estrutura:
----------------------------------------------------
Nome do Campo Tipo de Dados Tamanho
----------------------------------------------------
COD_TRAN LONG
DES_TRAN TEXT 30
----------------------------------------------------
-Defina um índice para o campo COD_TRANS e indique-o como chave primária
5-Finalmente , Crie uma tabela com o nome de tblcodtrans com a estrutura:
----------------------------------------------------
Nome do Campo Tipo de Dados Tamanho
----------------------------------------------------
COD_LANCA LONG INTEGER(*)
COD_TRANS LONG
COD_CLI LONG
COD_CONTA LONG
DATA_TRANS DATE/TIME
LANCAMENTO CURRENCY
SALDO CURRENCY
NU_DCTO TEXT 15
OBS_TRANS TEXT 30
----------------------------------------------------
(*)Como cada lancamento deve ter um codigo único garantindo assim sua exata
identificação , defina o tipo de dados para o campo cod_lanca
LONG INTEGER , e ative o atributo Counter e a opção Required.
-Defina os seguintes índices para esta tabela:
----------------------------------
nome do indice composição
----------------------------------
- PrimaryKey cod_lanca índice - chave primária (já definido)
----------------------------------
- datatrans data_trans índice - datatrans por data de transação
----------------------------------
Conteúdo
Controle Financeiro - Interface com o usuário.
Vamos agora desenhar a interface com o usuário. Nesta fase iremos
construir três formulários que comporão o nosso projeto:
- frmtrans - Formulário que gerencia a movimentação das contas
- frmexcl - Formulário para exclusão de lançamentos
- frmincl - Formulário para incluir lançamentos
- frmalt - Formulário para efetuar alterações nos lancamentos efetuados
1-O formulário frmtrans é o formulário principal de nossa aplicação , pois
através dele iremos gerenciar a movimentação das contas. Ele terá o aspecto da
fig1.0 abaixo:
fig 1.0 |
Para montar o formulário acima descrito observe os seguintes passos:
1-Inicie um novo projeto no Visual Basic.Grave o formulário Form1
como frmtrans. 2-Adicione ao Form1 os objetos e configure as propriedades
conforme a tabela 1.0 abaixo : Tabela 1.0 - Objetos e propriedades
do formulário frmtrans ----------------------------------------------------------------------------
Objeto Propriedade Configuração ----------------------------------------------------------------------------
Form Name frmtrans Caption "Movimentação Contas Correntes"
MDIChild True ----------------------------------------------------------------------------
Frame Name Frame1 Caption Cliente / Conta Corrente ----------------------------------------------------------------------------
Frame Name Frame2 Caption Período / Tipo de Transação
----------------------------------------------------------------------------
ComboBox Name CboCliente style 0-Dropdown Combo ----------------------------------------------------------------------------
ComboBox Name CboConta style 0-Dropdown Combo ----------------------------------------------------------------------------
Label Name Label6 Caption "" ----------------------------------------------------------------------------
MaskedBox Name maskini Mask 99/99/99 PrompInclude False PromptChar " "
----------------------------------------------------------------------------
MaskedBox Name maskfim Mask 99/99/99 PrompInclude False PromptChar " "
----------------------------------------------------------------------------
ComboBox Name CboTipo style 0-Dropdown Combo ----------------------------------------------------------------------------
(*)CommandButton Name command1(0) Caption "&Incluir" ---------------------------------------------------------------------------
CommandButton Name command1(1) Caption "&Excluir" ---------------------------------------------------------------------------
CommandButton Name command1(2) Caption "&Alterar" ---------------------------------------------------------------------------
CommandButton Name command1(3) Caption "&Sair" ---------------------------------------------------------------------------
CommandButton Name command2 Caption "&Processa" ---------------------------------------------------------------------------
SSPanel Caption "" Name SSPanel1 ---------------------------------------------------------------------------
Data Name data1 ---------------------------------------------------------------------------
DbGrid Name DbGrid1 Column1 Data Column2 Documento Column3 Transacao Column4
Historico Column5 Valor Column6 Saldo ---------------------------------------------------------------------------
(**)Label Caption ** AutoSize ** ---------------------------------------------------------------------------
(*)Constituem um "control array" - Controles com o mesmo nome e do mesmo
tipo, dotados de um índice identificador. (**)Todos os controles
Label possuem a propriedade AutoSize=True e Caption sendo
igual ao nome do respectivos controle descrito na fig 1.0. 2-O formulário
frmincl é o formulário que será usado para
incluir lançamentos. Tem o seguinte aspecto mostrado na fig 2.0
abaixo:
fig 2.0 |
Para montar o formulário acima descrito observe os seguintes passos:
1-Inicie um novo projeto no Visual Basic.Grave o formulário Form1
como frmincl. 2-Adicione ao Form1 os objetos e configure as propriedades
conforme a tabela 1.0 abaixo : Tabela 1.0 - Objetos e propriedades
do formulário frmincl ----------------------------------------------------------------------------
Objeto Propriedade Configuração ----------------------------------------------------------------------------
Form Name frmincl Caption "Lançamentos-Inclusão Debito/Crédito
MDIChild True ----------------------------------------------------------------------------
Frame Name Frame1 Caption Lançamento ----------------------------------------------------------------------------
OptionButton Name Option1 Caption Débito Value True ----------------------------------------------------------------------------
OptionButton Name Option2 Caption Crédito Value False ----------------------------------------------------------------------------
Frame Name Frame2 Caption Movimentação ----------------------------------------------------------------------------
MaskedBox Name maskdata Mask 99/99/99 PrompInclude False PromptChar " "
----------------------------------------------------------------------------
MaskedBox Name maskvalor format $#,##0.00;($#,##0.00) Mask "" PrompInclude
False PromptChar " " ----------------------------------------------------------------------------
ComboBox Name CboTipo style 0-Dropdown Combo ----------------------------------------------------------------------------
TextBox Name txtnudcto ----------------------------------------------------------------------------
TextBox Name txtdescr ----------------------------------------------------------------------------
SSPanel Caption "" Name SSPanel1 ---------------------------------------------------------------------------
(*)CommandButton Name command1(0) Caption "&Grava" ---------------------------------------------------------------------------
CommandButton Name command1(1) Caption "&Cancela" ---------------------------------------------------------------------------
CommandButton Name command1(2) Caption "&Sair" ---------------------------------------------------------------------------
(*)Constituem um "control array" - Controles com o mesmo nome e do mesmo
tipo, dotados de um índice identificador. (**)Todos os controles
Label possuem a propriedade AutoSize=True e Caption sendo
igual ao nome do respectivos controle descrito na fig 2.0. 3-O formulário
frmexcl é o formulário que será usado para
excluir lançamentos. Tem o seguinte aspecto mostrado na fig 3.0
abaixo:
fig 3.0 |
Para montar o formulário acima descrito observe os seguintes passos:
1-Inicie um novo projeto no Visual Basic.Grave o formulário Form1
como frmexcl. 2-Adicione ao Form1 os objetos e configure as propriedades
conforme a tabela 1.0 abaixo : Tabela 1.0 - Objetos e propriedades
do formulário frmexcl ----------------------------------------------------------------------------
Objeto Propriedade Configuração ----------------------------------------------------------------------------
Form Name frmexcl Caption "Exclusão de Dados" MDIChild True ----------------------------------------------------------------------------
Frame Name Frame1 Caption Excluir Dados ----------------------------------------------------------------------------
OptionButton Name Option1 Caption A partir de Value True ----------------------------------------------------------------------------
OptionButton Name Option2 Caption Antes de Value False ----------------------------------------------------------------------------
OptionButton Name Option2 Caption No Período de Value False ----------------------------------------------------------------------------
TextBox Name text2 ----------------------------------------------------------------------------
TextBox Name txtdcto ----------------------------------------------------------------------------
TextBox Name text1 Visible false ----------------------------------------------------------------------------
CommandButton Name command2 Caption "OK" ---------------------------------------------------------------------------
CommandButton Name command1 Caption "&Cancela" ---------------------------------------------------------------------------
Conteúdo
Controle Financeiro - Código do projeto.
-Código do formulário de menu:frmmenu
Botões de Comando do Menu.
Private Sub SSCommand1_Click(Index As Integer)
select case index
case 0
case 1 'frmtransa
frmtransa.Show
case 2
case 3
case 4 'sair
end
end select
End Sub
-Código do formulário das transações:frmtransa
-Caixa de combinação cliente
Private Sub cbocliente_Click()
If cbocliente.Text < > "" Then
Dim sql_tmp As String
sql_tmp = "SELECT * FROM tblcontas WHERE tblcontas.cod_cli=" & cbocliente.ItemData(cbocliente.ListIndex)
enche_combo cboconta, sql_tmp, "cod_conta", "cod_cli"
End If
End Sub
-caixa de combinação conta
Private Sub cboconta_Click()
If cboconta.Text < > "" Then
Dim arqtemp As Recordset
Set arqtemp = db.OpenRecordset("tblcontas", dbOpenTable)
arqtemp.Index = "codconta"
arqtemp.Seek "=", Val(cboconta.Text)
Label6.Caption = arqtemp("desc_conta")
arqtemp.Close
Maskini.SetFocus
End If
End Sub
-Código dos botões Incluir, Excluir, Alterar e Sair
Private Sub Command1_Click(Index As Integer)
Dim msg As String
Set tabela = db.OpenRecordset("tbltrans", dbOpenTable)
tabela.Index = "cod_conta"
Select Case Index
Case 0 'incluir
alterareg = False
frmtrans_i.Show 1
Case 1 'excluir
frmexcl.Show 1
data2.Refresh
Case 2 'alterar
if dbgrid1.columns(0) < > "" then
tabela.Seek "=", DBGrid1.Columns(0)
else
msgbox "Selecione um lancamento a alterar ! "
exit sub
endif
alterareg = True
frmtrans_i.Show 1
Case 3
Unload Me
Exit Sub
End Select
atualiza_grid (sql)
Data2.Refresh
End Sub
-Código do botão Processar
Private Sub Command2_Click()
Dim msg As String
Dim x As Integer
'------checa selecao de cliente/conta--
If cbocliente.ListIndex = -1 Then
msg = "Selecione um cliente !"
MsgBox msg, vbExclamation
cbocliente.SetFocus
Exit Sub
End If
If cboconta.ListIndex = -1 Then
msg = "Selecione uma conta !"
MsgBox msg, vbExclamation
cboconta.SetFocus
Exit Sub
End If
'-- atribui cliente/conta as variaveis publicas
Cliente = cbocliente.ItemData(cbocliente.ListIndex)
conta = cboconta.Text
'--habilita botões de comandos--
For x = 0 To 2
Command1(x).Enabled = True
Next
'-- estabelece consulta SQL ------
sql = "SELECT data_trans, cod_trans, lancamento, nu_dcto, saldo, obs_trans FROM tbltrans"
sql = sql & " WHERE cod_cli=" & cbocliente.ItemData(cbocliente.ListIndex)
sql = sql & " AND cod_conta=" & cboconta.Text
'---------define tipo da transacao para consulta--
If cbotipo.ListIndex < > -1 Then
sql = sql & " AND cod_trans=" & cbotipo.ItemData(cbotipo.ListIndex)
End If
'---verifica data inicial/final e define período-----
If Maskini < > " / / " And maskfim < > " / / " Then
If Not IsDate(Maskini) Then
msg = "Data inicial invalida"
Maskini.SetFocus
MsgBox msg, vbExclamation
Exit Sub
ElseIf Not IsDate(maskfim) Then
msg = "Data final inválida "
maskfim.SetFocus
MsgBox msg, vbExclamation
Exit Sub
End If
sql = sql & " AND data_trans >= " & "#" & Format((Maskini), "mm/dd/yy") & "#"
sql = sql & " AND data_trans <= " & "#" & Format((maskfim), "mm/dd/yy") & "#"
End If
'-----atualiaza Recordsource-------
sql = sql & " ORDER BY data_trans"
Data2.RecordSource = sql
atualiza_grid (sql)
Data2.Refresh
End Sub
-Código de carga do formulário
Private Sub Form_Load()
Dim x As Integer
'-------define tamanho do form----
Me.Width = 8295
Me.Height = 5595
'-- desabilita botões de comando
For x = 0 To 2
Command1(x).Enabled = False
Next
'---- abre tabela / e define índice ativo---
'Set tabela = db.OpenRecordset("tbltrans", dbOpenTable)
'tabela.Index = "clicndtr"
'----configura data control---
Data2.DatabaseName = App.Path & "\joias.mdb"
Data2.RecordSource = "SELECT * FROM tbltrans WHERE cod_trans = Null"
'---------formata grid--------------------
DBGrid1.Columns(0).Width = 900
DBGrid1.Columns(1).Width = 950
DBGrid1.Columns(2).Width = 925
DBGrid1.Columns(3).Width = 2200
DBGrid1.Columns(4).Width = 1300
DBGrid1.Columns(5).Width = 1300
dbgrid1.columns(6).width = 1300
'----------atualiza o grid-------------------
Data2.Refresh
'-------atualiza combobox cliente ------------------
enche_combo cbocliente, "tblcli", "des_cli", "cod_cli"
enche_combo cbotipo, "tblcodtrans", "des_tran", "cod_tran"
'----------------------------------------------
End Sub
-Código da função que atualiza o Grid
Public Sub atualiza_grid(sql As String)
Dim credito, debito As Currency
Dim saldo_atu As Currency
Dim arqtemp As Recordset
saldo_atu = 0
'---------------------------------------------
Set arqtemp = db.OpenRecordset(sql, dbOpenDynaset)
'---------------------------------------------
If arqtemp.EOF Then
MsgBox "Não há dados no arquivo !", vbExclamation
arqtemp.Close
Exit Sub
End If
arqtemp.MoveFirst
Do
credito = 0
debito = 0
If Not IsNull(arqtemp![lancamento]) Then
If arqtemp![lancamento] > 0 Then
credito = arqtemp![lancamento]
Else
debito = arqtemp![lancamento]
End If
Else
credito = 0
debito = 0
End If
saldo_atu = credito + debito + saldo_atu
arqtemp.Edit
arqtemp![saldo] = saldo_atu
arqtemp.Update
arqtemp.MoveNext
Loop While Not arqtemp.EOF
arqtemp.Close
End Sub
Código do formulário para incluir/alterar dados: Frmincl
Código dos botões Gravar, Cancelar e Sair
Private Sub Command1_Click(Index As Integer)
Select Case Index
Case 0 'gravar
grava_recs
tabela.Update
If alterareg Then
Unload Me
Exit Sub
End If
tabela.AddNew
maskdata.SetFocus
Case 1 'cancelar
MsgBox "Atenção , as informações não foram gravadas ! "
If alterareg Then
Unload Me
Exit Sub
End If
clear_controls
maskdata.SetFocus
Case 2 'sair
Unload Me
End Select
End Sub
Código de rotina de gravação
Código do botão de opção Antes de
Private Sub Option1_Click()
If Option1.Value = True Then
Label2.Visible = False
Text1.Visible = False
End If
Text2.SetFocus
End Sub
Código do botão de opção A Partir de
Private Sub Option2_Click()
If Option2.Value = True Then
Label2.Visible = False
Text1.Visible = False
End If
Text2.SetFocus
End Sub
Código do botão de opção No período de
Private Sub Option3_Click()
If Option3.Value = True Then
Label2.Visible = True
Text1.Visible = True
End If
Text2.SetFocus
End Sub
Código do modulo financa.bas
Código do seção general declarations
Option Explicit
Public area As Workspace
Public db As Database
Public tabela As Recordset
Public consulta As QueryDef
Public alterareg As Boolean
Public sql As String
Public cliente As Long
Public conta As Long
Código de Sub Main
Sub main()
'define area ativa e abre arquivo de dados
Set area = DBEngine.Workspaces(0)
Set db = area.OpenDatabase(App.Path & "\banco.mdb")
'mostra formulário de menu
frmmenu.Show
End Sub
Código da função que preenche as combobox
Public Sub enche_combo(combo As Control, data As String, campo As String, indice As String)
'-- cria variável recordset temporária
Dim arqtemp As Recordset
'-----limpa combo
combo.Clear
'-----abre tabela como Snapshot
Set arqtemp = db.OpenRecordset(data, dbOpenSnapshot)
'--inicia loop através da tabela---
Do Until arqtemp.EOF
combo.AddItem arqtemp(campo)
combo.ItemData(combo.NewIndex) = arqtemp(indice)
arqtemp.MoveNext
Loop
'---fecha recordset e não seleciona nada na combo
arqtemp.Close
combo.ListIndex = -1
End Sub
Veja abaixo a tela do formulário transações em tempo
em execução:
 |
Conteúdo
DbGrid - Dicas e Truques.
1-Tornando uma coluna invisível
DbGrid1.columns(i).visible= False
Conteúdo
Retorna