Jump to content

Usar controles em Modulos


morhy
 Share

Recommended Posts

Amigos,

Boa noite, sou novo no forum e estou querendo fazer algumas coisas em VB.Net, tenho experiência em ASP (antigamente eu fazia sistemas nessa libguagem) e VB6 (fiz algumas besteiras para minha empresa).

Agora estou tentando dar literalmente um pulo fazendo um programa simples em VB.NET, ai vem as dificuldades.

Eu criei um modulo e nele contem Funções para acesso ao DB e var carregar algumas GridViews, ListBox e CheckListBox.

Minha dificuldade está nesse código:

    Public Function Carrega_Acompanhantes()

        ' Carrega Acompnhantes

        Dim da_acomp As New MySqlDataAdapter("SELECT Id, nome, setor FROM funcionarios WHERE setor = '1'", conecta)
        Dim ds_acomp As DataSet = New DataSet
        da_acomp.Fill(ds_acomp, "funcionarios")
        Dim dv_acomp As DataView = ds_acomp.Tables("funcionarios").DefaultView

        Try
            cb_acomp.DataSource = dv_acomp
            cb_acomp.DisplayMember = "nome"
            cb_acomp.ValueMember = "id"
            cb_acomp.SelectedIndex = 0
            cb_acomp.DataSource = dv_acomp
        Catch ex As Exception
            MessageBox.Show("ErrObject: " & ex.Message & vbCrLf & vbCrLf & ex.StackTrace)
        End Try

' Eu devo colocar oque aqui para que a CheckListBox se arregue no LOAD do form ??        
Return ???

    End Function

cb_acomp é uma CheckListBox, o VS.NET 2010 diz o seguinte (logo após não deixa eu executar o programa):

'cb_acomp' não está declarado. Ele pode ser inacessicel devido ao seu nivel de proteção.

Tentei colocar:

form1.cb_acomp...

ME.cb_acomp...

E nada funciona.

Por favor, como posso resolver este problema?

Aproveitando... no LOAD do form eu coloco Carrega_Acompanhantes() para carregar a CheckBoxList com o nome dos funcionarios, oque eu devo colocar no RETURN da função?

Agradeço a atenção de todos.

Link to comment
Share on other sites

Modules, no fundo, são classes de métodos estáticos com âmbito transversal.

Quando passas este tipo de lógica para uma classe deste tipo, tens de pensar que não existe âmbito da instância, e por essa razão não vais apanhar os objectos do form.

A maneira mais simples de o fazeres será passares os objectos que pretendes por referência.

Basta alterares a assinatura do método para:

Public Function Carrega_Acompanhantes(ByRef cb_acomp As CheckBoxList)

E depois na chamada, lá onde a chamas:

Carrega_Acompanhantes(cb_acomp)

Assim estás a transportar, por referência, a combobox para dentro do âmbito "static" do método.

Assim, não precisa de ser Function, basta ser Sub. O que anula o teu "Return ???"

Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Link to comment
Share on other sites

Amigo

Obrigado pela resposta, ontem revirando este forum encontrei um post parecido com o meu que me ajudou a resolver o problema, mas em vez de:

Public Sub Carregar_Acompanhantes(ByRef cb_acomp AS CheckBoxList)

Coloquei no Modulo apenas:

Public Sub Carregar_Acompanhantes(ByRef cb_acomp)

Depois no LOAD do form:

Carregar_Acompanhantes(cb_acomp)

E como você disse, mudei de Função para uma simples Sub eliminando o RETURN

Tudo se resolveu.

Obrigado amigo.

Link to comment
Share on other sites

É importante que percebas a diferença dessa solução para a minha.

Se não especificares o tipo da variável, o VB assume Object.

Isto não é bom, porque vais perder, por exemplo, o intellisense para a checkboxlist a menos que faças casts.

Neste caso, em que sabes exactamente que é uma CheckBoxList que vais passar, deves indicar o tipo no parâmetro.

Ganham-se uns nanos em casts e intellisense.

Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Link to comment
Share on other sites

Amigo

Por mais que eu esteja recomeçando a programar, preciso desse programa com urgência e gosto de aprender a fazer as coisas direito.

Tentei da forma que você disse mas não deu certo, o VS.NET diz que esse código não é correto e não deixa eu executar o programa:

Public Sub Carregar_Acompanhantes(ByRef cb_acomp As CheckBoxList)

Ele deu essas duas opções:

1:

Public Sub Carregar_Acompanhantes(ByRef cb_acomp As CheckedListBox)

Essa de cima funciona, carrega direitinho o CheckBoxList

2: Essa outra não funciona:

Public Sub Carregar_Acompanhantes(ByRef cb_acomp As CheckBox)

Da "erro" em instruções do tipo:

            cb_acomp.DataSource = dv_acomp
            cb_acomp.DisplayMember = "Nome"
            cb_acomp.ValueMember = "ID"

Diz que  'DataSource', 'DysplayMember', 'ValueMember' não é membro System.Windows.Form.CheckBox

Alguma sugestão?

Obrigado.

Link to comment
Share on other sites

Amigos

Agradeço a atenção, especialmente ao usuário ribeiro55.

Problema resolvido, testado e funcionando.

Deixarei aqui os procedimentos para que eventualmente possa ajudar alguém no futuro.

No Load do Form ficou assim:

' Carrega Acompanhantes
Carregar_Acompanhantes(cb_acomp) 

No Modulo:

    Public Sub Carregar_Acompanhantes(ByRef cb_acomp As CheckedListBox)

        Dim da_acomp As New MySqlDataAdapter("SELECT Id, nome, setor FROM funcionarios WHERE setor = '1'", conecta)
        Dim ds_acomp As DataSet = New DataSet
        da_acomp.Fill(ds_acomp, "funcionarios")
        Dim dv_acomp As DataView = ds_acomp.Tables("funcionarios").DefaultView

        Try
            cb_acomp.DataSource = dv_acomp
            cb_acomp.DisplayMember = "Nome"
            cb_acomp.ValueMember = "ID"

        Catch ex As Exception
            MessageBox.Show("ErrObject 01: " & ex.Message & vbCrLf & vbCrLf & ex.StackTrace)
        End Try

    End Sub

Obrigado mais uma vez.

Link to comment
Share on other sites

Tinhas de colocar do tipo correcto. Eu não sei o que tens no form.

O importante era colocar o tipo e não deixar o vb assumir Object. 😕

Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.