IMPOSSIVEL PESQUISAR.NOVA TENTATIVA!
Prezados colegas,
Estou novamente postando este tópico, pois não consegui fazer com que os colegas entendessem meu problema.
Eu provavelmente não fui claro.Vejamos se consigo agora explicar melhor:
-----------------------------------------------------------------------------------------------------------------------------------------
Como sabemos,no VB(6.0) para exibir um formulário
bastava empregar o método [Ô]Show[Ô]:
Form1.Show
Nada mais simples.
No entanto não podemos mais fazer isto no VB.NET.
Agora fazemos algo assim:
Para abrir:
Dim FFrm2 As New Form2
FFrm2.Show
Para fechar:
Me.Close
------------------------------------------------------------------------------------------------------------------------------
Tenho um projeto simples de cadastro de Clientes com 3 formulários:
FrmMain
FrmCliente
FrmPesquisar
- Quando o projeto é executado, o formulário FrmMain é aberto
- Ao se abrir, existe um botão que ao ser clicado abre o formulário FrmCliente
- O Formulário FrmCliente ao ser aberto, tem um botão que ao ser clicado abre o formulário FrmPesquisar
O código que estou usando para abrir os formulários é:
No botão do formulário FrmMain, eu abro o FrmCliente com o seguinte código:
Dim FFrmCliente As New FrmCliente
FFrmCliente.Show
No botão do formulário FrmCliente, eu abro o FrmPesquisar com o seguinte código:
Dim FFrmPesquisar As New FrmPesquisar
FFrmPesquisar.Show
No botão do formulário FrmPesquisar, eu executo um método que existe no FrmCliente, chamado [Ô]Pesquisar Cliente[Ô]:
[ô]Executar método
FrmCliente.PesquisarCliente
Qual é o problema???
Quando eu clico no botão do FrmPesquisar que executa o método, o VB.NET não consegue encontrar o método [Ô]PesquisarCliente[Ô] do formulário
FrmCliente.
Pesquisando no site do Macoratti, encontrei um artigo dele no qual ele recomenda que se declare as formulários com públicos em um módulo
separado:
Public FFrmCliente As FrmCliente
Public FFrmPesquisar As FrmPesquisar
Isto realmente funciona,mas tem um grave incoveniente. Se você fecha o formulário FrmCliente e tenta abrir de novo,o VB.NET exibe
uma mensagem de erro,dizendo que não encontrou o Formulário para abrir numa segunda tentativa
Para resumir......
O formulário FrmPesquisar, não consegue acesso aos métodos do formulário FrmCliente.Só se como o Macoratti sugere forem declarados
públicos num módulo separado.Mas ai não se consegue abrir o FrmCliente duas veses seguidas.
Algum colega de nÃvel [Ô]Guru[Ô] consegue visualizar uma solução?????
Estou novamente postando este tópico, pois não consegui fazer com que os colegas entendessem meu problema.
Eu provavelmente não fui claro.Vejamos se consigo agora explicar melhor:
-----------------------------------------------------------------------------------------------------------------------------------------
Como sabemos,no VB(6.0) para exibir um formulário
bastava empregar o método [Ô]Show[Ô]:
Form1.Show
Nada mais simples.
No entanto não podemos mais fazer isto no VB.NET.
Agora fazemos algo assim:
Para abrir:
Dim FFrm2 As New Form2
FFrm2.Show
Para fechar:
Me.Close
------------------------------------------------------------------------------------------------------------------------------
Tenho um projeto simples de cadastro de Clientes com 3 formulários:
FrmMain
FrmCliente
FrmPesquisar
- Quando o projeto é executado, o formulário FrmMain é aberto
- Ao se abrir, existe um botão que ao ser clicado abre o formulário FrmCliente
- O Formulário FrmCliente ao ser aberto, tem um botão que ao ser clicado abre o formulário FrmPesquisar
O código que estou usando para abrir os formulários é:
No botão do formulário FrmMain, eu abro o FrmCliente com o seguinte código:
Dim FFrmCliente As New FrmCliente
FFrmCliente.Show
No botão do formulário FrmCliente, eu abro o FrmPesquisar com o seguinte código:
Dim FFrmPesquisar As New FrmPesquisar
FFrmPesquisar.Show
No botão do formulário FrmPesquisar, eu executo um método que existe no FrmCliente, chamado [Ô]Pesquisar Cliente[Ô]:
[ô]Executar método
FrmCliente.PesquisarCliente
Qual é o problema???
Quando eu clico no botão do FrmPesquisar que executa o método, o VB.NET não consegue encontrar o método [Ô]PesquisarCliente[Ô] do formulário
FrmCliente.
Pesquisando no site do Macoratti, encontrei um artigo dele no qual ele recomenda que se declare as formulários com públicos em um módulo
separado:
Public FFrmCliente As FrmCliente
Public FFrmPesquisar As FrmPesquisar
Isto realmente funciona,mas tem um grave incoveniente. Se você fecha o formulário FrmCliente e tenta abrir de novo,o VB.NET exibe
uma mensagem de erro,dizendo que não encontrou o Formulário para abrir numa segunda tentativa
Para resumir......
O formulário FrmPesquisar, não consegue acesso aos métodos do formulário FrmCliente.Só se como o Macoratti sugere forem declarados
públicos num módulo separado.Mas ai não se consegue abrir o FrmCliente duas veses seguidas.
Algum colega de nÃvel [Ô]Guru[Ô] consegue visualizar uma solução?????
Amigo, não sou nÃvel GURU mais vai uma sugestão.
Substitua
Por
e para fechar utilize
Substitua
Dim FFrmPesquisar As New FrmPesquisar
FFrmPesquisar.Show
Por
FFrmPesquisar.ShowDialog
e para fechar utilize
Me.Dispose()
Me.Close()
Marcos pelo que eu intendi, você está querendo usar um método que está dentro do formulário (FrmCliente) através de outro formulário (FrmPesquisar)
Faça assim, coloque qual formulário que está o método e o nome do método, ele vai lá no formulário e busca o método. Essa é a grande maravilha da orientação Objetos.
para testar, coloca o cursor no nome do metodo precione F12 que ele vai te levar no formulário onde ele está. Você pode colocar um Breackpoint para ver o funcionamento correto e verificar onde está o erro.
Não sei se ajudei, mas está ai.
Abraço!
Faça assim, coloque qual formulário que está o método e o nome do método, ele vai lá no formulário e busca o método. Essa é a grande maravilha da orientação Objetos.
Citação:FrmCliente.PesquisarCliente()
para testar, coloca o cursor no nome do metodo precione F12 que ele vai te levar no formulário onde ele está. Você pode colocar um Breackpoint para ver o funcionamento correto e verificar onde está o erro.
Não sei se ajudei, mas está ai.
Abraço!
Só mais uma dica, fiz um teste aqui no meu e vi o seguinte.
Eu estava retornando os dados que estavam em:
[ô]Busca os dados no dataset
[ô]Atualiza o DataGrid
No meu caso, para os dados serem mostrados, foi preciso eu dizer qual formulário que estava o datagrid, que mostraria o valor, no método onde eu estou acessando, nese caso seria melhor criar outro método no seu formulário de pesquisa.
Talvés seja seu caso.
Eu estava retornando os dados que estavam em:
[ô]Busca os dados no dataset
FrmCadMenu.
DtgCadMenu.DataSource = dt[ô]Atualiza o DataGrid
FrmCadMenu
.DtgCadMenu.Refresh()No meu caso, para os dados serem mostrados, foi preciso eu dizer qual formulário que estava o datagrid, que mostraria o valor, no método onde eu estou acessando, nese caso seria melhor criar outro método no seu formulário de pesquisa.
Talvés seja seu caso.
Como o Jesuel disse substitua Public FFrmPesquisar As FrmPesquisar por FrmPesquisar.ShowDialog
Não é necessário instanciar um novo formulário para cada [Ô]Chamada[Ô], basta somente chamar o mesmo.
Para fechar o formulário, você pode usar o me.dispose
Para chamar os métodos de um formulário você deve deixa-los como públicos,mas tome cuidado ao instanciar um novo formulário para chamar os metodos do mesmo, ex: vou chamar o método PesquisarCliente do meu formulário clientes, na teoria eu faria assim: Dim FFrmPesquisar as new FrmPesquisar()
FFrmPesquisar.PesquisarCliente(), mas isto irá instanciar um formulário em branco(Novo) e você não conseguirá pegar as informações que necessita.
Você deve somente colocar o nome do formulário e o seu método.
Existem soluções para casos diferentes, e acho que para o seu caso, instanciar um novo formulário a cada chamada é em vão.
Outra dica, tenta Debugar, isto o ajudará bastante a achar o problema.
Abraços
Não é necessário instanciar um novo formulário para cada [Ô]Chamada[Ô], basta somente chamar o mesmo.
Para fechar o formulário, você pode usar o me.dispose
Para chamar os métodos de um formulário você deve deixa-los como públicos,mas tome cuidado ao instanciar um novo formulário para chamar os metodos do mesmo, ex: vou chamar o método PesquisarCliente do meu formulário clientes, na teoria eu faria assim: Dim FFrmPesquisar as new FrmPesquisar()
FFrmPesquisar.PesquisarCliente(), mas isto irá instanciar um formulário em branco(Novo) e você não conseguirá pegar as informações que necessita.
Você deve somente colocar o nome do formulário e o seu método.
Existem soluções para casos diferentes, e acho que para o seu caso, instanciar um novo formulário a cada chamada é em vão.
Outra dica, tenta Debugar, isto o ajudará bastante a achar o problema.
Abraços
Cara, também não sou nÃvel GURU mas também vai uma sugestão:
Se você quer que vários Formulários acessem uma mesma Sub ou Function ou Property, faça uso de Classes.
Exemplo:
Crie um arquivo Class e deixe seu nome como Class1
No Botão de qualquer form:
Se você ainda assim quiser deixar os métodos no Form1 e quiser que outro form os utilize, então você deve ler, estudar e entender o conceito de Herança
Algo como:
Se você quer que vários Formulários acessem uma mesma Sub ou Function ou Property, faça uso de Classes.
Exemplo:
Crie um arquivo Class e deixe seu nome como Class1
Public [txt-color=#0000f0]Class[/txt-color] Class1
Public ReadOnly Property BuscarDados(ByVal qualNomeCliente As String) As OleDb.OleDbDataReader
Get
[txt-color=#007100][ô]Código para buscar dados[/txt-color]
Return BuscarDados
End Get
End Property
End [txt-color=#0000f0]Class[/txt-color]
No Botão de qualquer form:
Private Sub Button1_Click(...
Dim objClasse As New Classes
Dim Nome As String = Trim(TextBox1.Text)
Dim Dados As OleDb.OleDbDataReader
Dados = ObjClasses.BuscarDados(Nome)
End Sub
Se você ainda assim quiser deixar os métodos no Form1 e quiser que outro form os utilize, então você deve ler, estudar e entender o conceito de Herança
Algo como:
Public [txt-color=#0000f0]Class[/txt-color] Form2
[txt-color=#0000f0] Inherits[/txt-color] Form1
End Class
Boa tarde!!!
Prezados colegas,depois de testar a recomendação dos colegas feitas acima, fiz uma descoberta muito interessante:
1.) Nenhuma das sugestões funcionou ! ( Embora todas tenham sido muito proveitosas e pertinentes)
2.) Descobri algo muito mais misterioso !!!! ( Ao menos para mim , que não sou GURU)
é que descobri que na verdade, quando eu chamo o método do FrmCliente a partir do FrmPesq, ele é [Ô]Executado sim[Ô].......
O incrivel, é que nenhum dos controles (Textbox,Labels,etc...) exibe dado algum...............mesmo o valor sendo atribuido ao
controle.
Obs: Nenhuma mensagem de erro é exibida pelo VB.NET
CONCLUSÃO: O mistério só aumentou.
Eu tive uma idéia. Dizem que uma imagem vale mais que mil palavras.Então fiz um projeto no VB.NET simples com estes 3 formulários.
Igual ao do meu projeto. Compactei tudo (Formato .Rar)
Gostaria de fazer o seguinte pedido aos colegas:
Será que posso lhes enviar por e-mail ,este exemplo que fiz.Assim basta abrir com o Visual Studio e vocês poderão me dizer se
o que estou dizendo faz sentido.
Tentei anexar o projeto aqui no VBMania, mas o formato (.Rar) não foi aceito. Algum colega pode me citar um e-mail para onde eu possa enviar????????
Qualquer ajuda é bem vinda.
Prezados colegas,depois de testar a recomendação dos colegas feitas acima, fiz uma descoberta muito interessante:
1.) Nenhuma das sugestões funcionou ! ( Embora todas tenham sido muito proveitosas e pertinentes)
2.) Descobri algo muito mais misterioso !!!! ( Ao menos para mim , que não sou GURU)
é que descobri que na verdade, quando eu chamo o método do FrmCliente a partir do FrmPesq, ele é [Ô]Executado sim[Ô].......
O incrivel, é que nenhum dos controles (Textbox,Labels,etc...) exibe dado algum...............mesmo o valor sendo atribuido ao
controle.
Obs: Nenhuma mensagem de erro é exibida pelo VB.NET
CONCLUSÃO: O mistério só aumentou.
Eu tive uma idéia. Dizem que uma imagem vale mais que mil palavras.Então fiz um projeto no VB.NET simples com estes 3 formulários.
Igual ao do meu projeto. Compactei tudo (Formato .Rar)
Gostaria de fazer o seguinte pedido aos colegas:
Será que posso lhes enviar por e-mail ,este exemplo que fiz.Assim basta abrir com o Visual Studio e vocês poderão me dizer se
o que estou dizendo faz sentido.
Tentei anexar o projeto aqui no VBMania, mas o formato (.Rar) não foi aceito. Algum colega pode me citar um e-mail para onde eu possa enviar????????
Qualquer ajuda é bem vinda.
Faz o seguinte:
Clica em cima da pasta de projeto do teu exemplo e depois em [Ô]Add to Archive[Ô] ou [Ô]Adicionar ao arquivo[Ô] ou algo parecido.
Depois é so trocar o tipo de arquivo para .ZIP e executar
AÃ sim você poderá anexar aqui no Fórum
Clica em cima da pasta de projeto do teu exemplo e depois em [Ô]Add to Archive[Ô] ou [Ô]Adicionar ao arquivo[Ô] ou algo parecido.
Depois é so trocar o tipo de arquivo para .ZIP e executar
AÃ sim você poderá anexar aqui no Fórum
na sua rotina de pesquisa em quais controles de qual form voce está mandando exibir os dados?
veja se não é esse o problema
veja se não é esse o problema
Pessoal,
Acho que consegui anexar o projeto.
Se algum colega puder abrir e verificar fico muito grato.
Acho que consegui anexar o projeto.
Se algum colega puder abrir e verificar fico muito grato.
Marcos, é como eu te falei.
FrmCadMenu.DtgCadMenu.DataSource = dt
FrmCadMenu.DtgCadMenu.Refresh()
Os dados estão sendo carregados, mas o método está no frmclientes por isso ele não joga os dados no frmpesquisa.
Você precisa informar no método do frmclientes onde estão os textBox que receberam os dados
Tipo Assim:
frmpesquisa.textbox.text
No meu exemplo acima eu uso um Dadagri para receber os dados do DataSet [Ô]dt[Ô].
FrmCadMenu.DtgCadMenu.DataSource = dt
FrmCadMenu.DtgCadMenu.Refresh()
Os dados estão sendo carregados, mas o método está no frmclientes por isso ele não joga os dados no frmpesquisa.
Você precisa informar no método do frmclientes onde estão os textBox que receberam os dados
Tipo Assim:
frmpesquisa.textbox.text
No meu exemplo acima eu uso um Dadagri para receber os dados do DataSet [Ô]dt[Ô].
Tópico encerrado , respostas não são mais permitidas