morhy Posted March 29, 2012 at 02:58 AM Report #446212 Posted March 29, 2012 at 02:58 AM 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.
ribeiro55 Posted March 29, 2012 at 09:11 AM Report #446223 Posted March 29, 2012 at 09:11 AM 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"
morhy Posted March 29, 2012 at 12:03 PM Author Report #446294 Posted March 29, 2012 at 12:03 PM 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.
ribeiro55 Posted March 29, 2012 at 01:18 PM Report #446313 Posted March 29, 2012 at 01:18 PM É 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"
morhy Posted March 29, 2012 at 06:36 PM Author Report #446442 Posted March 29, 2012 at 06:36 PM 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.
Caça Posted March 29, 2012 at 07:27 PM Report #446452 Posted March 29, 2012 at 07:27 PM Essas opções só são validas para uma ComboBox, não para uma CheckBox. Pedro Martins Não respondo a duvidas por PM
morhy Posted March 29, 2012 at 09:33 PM Author Report #446484 Posted March 29, 2012 at 09:33 PM 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.
ribeiro55 Posted March 29, 2012 at 11:30 PM Report #446512 Posted March 29, 2012 at 11:30 PM 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"
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now