IMPOSSIVEL PESQUISAR.NOVA TENTATIVA!

MARCOS 13/03/2013 08:48:56
#420359
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?????

JESUEL.OLIVEIRA 13/03/2013 09:07:17
#420360
Amigo, não sou nível GURU mais vai uma sugestão.

Substitua
  
Dim FFrmPesquisar As New FrmPesquisar
FFrmPesquisar.Show


Por

   
FFrmPesquisar.ShowDialog



e para fechar utilize

   
Me.Dispose()
Me.Close()
DENNERFOX 13/03/2013 09:08:16
#420361
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.

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!
DENNERFOX 13/03/2013 09:26:05
#420363
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
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.

GUIMORAES 13/03/2013 09:39:14
#420366
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
PEGUDO 13/03/2013 09:52:35
#420368
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
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
MARCOS 13/03/2013 12:49:52
#420387
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.





PEGUDO 13/03/2013 13:31:06
#420389
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
DAMASCENO.CESAR 13/03/2013 13:43:49
#420393
na sua rotina de pesquisa em quais controles de qual form voce está mandando exibir os dados?
veja se não é esse o problema
MARCOS 13/03/2013 13:55:21
#420397
Pessoal,
Acho que consegui anexar o projeto.

Se algum colega puder abrir e verificar fico muito grato.
DENNERFOX 13/03/2013 14:10:23
#420398
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[Ô].


Página 1 de 2 [19 registro(s)]
Tópico encerrado , respostas não são mais permitidas