none
Transferir informação entre formulários de uma mesma aplicação RRS feed

  • Pergunta

  • Olá! 

    Não sei como se faz para transferir um dado de um formulário para outro? Alguém poderia me dar uma luz, dizendo-me como se faz isso?

    Tenho um form1 que manipula uma tabela chamada Agenda, em que tenho um campo onde está o e-mail de cada contato. Em outra formulário (2), faço a interface para a definição do assunto, corpo do e-mail e arquivos anexos. No Form1 tenho um botão que chama o Form2 e é nesse ponto que gostaria que o e-mail do registro que está sendo visualizado na tela do Form1 fosse transferido para o destinatário do e-mail que vou escrever no Form2. 

    Bom, espero ter conseguido explicar minha dúvida. 

    Paulo Afonso

    quinta-feira, 25 de abril de 2013 19:39

Respostas

  • O Form3 está fazendo alguma conexão com a base.
    Pois se o seu form1 faz conexão e passa as informações para o form3 não teria sentido o form3 trazer informações da base.
    No evento cmdBuscar_Click vc comentou que o mesmo não está filtrando certo ? 
    Tente colocar o "%" no final também.
    • Editado Ninho_Blink quinta-feira, 2 de maio de 2013 15:00 editando
    • Marcado como Resposta Paulo Meireles quinta-feira, 2 de maio de 2013 17:17
    quinta-feira, 2 de maio de 2013 14:55
  • Opa sempre, compartilhar conhecimento né ?! rsrs
    Então geralmente eu faço assim:

            Dim conn As New MySqlConnection 'Aqui tem que ser o do sql,pois fiz conexão com o do mysql
            Dim myCommand As New MySqlCommand 
            Dim dS As MySqlDataReader
            Dim palavra As String   


                 conn.ConnectionString = "Sua String de Conexão"

            
                'Passando o select e a conexão
                myCommand = New MySqlCommand("Seu Select com a condição", conn)
                conn.Open()

                dS = myCommand.ExecuteReader
                'dS.Read()
                palavra = dS.GetString(0)
                Return palavra

    Qualquer coisa tem o link :

    http://www.youtube.com/watch?v=guQPjwCh7VY

    Vê se consegue com esse código, ai posta aqui
    • Marcado como Resposta Paulo Meireles sexta-feira, 3 de maio de 2013 17:41
    sexta-feira, 3 de maio de 2013 11:54

Todas as Respostas

  • No Form1 você faz o seguinte :

       Dim form2 As New janela
       janela.Destinatario.Text = Me.Remetente.Text

    Espero ter ajudado
    sexta-feira, 26 de abril de 2013 14:57
  • Olá  Ninho_Blink,

    Obrigado por ajudar-me. Ocorre que foi exatamente isso que eu havia feito, veja como estava:

       Private Sub Enviar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Enviar.Click

            Dim MiForm3 As New Form3
            MiForm3.EmailTextBox.Text = txtMail.Text
            MiForm3.Show()

        End Sub

    Veja que o MiForm3.Show() utilizo para abrir o formulário (3), que é necessário para o preenchimento dos campos de assunto e corpo do e-mail que quero remeter. 

    Preenchi a base dos contatos com somente dois registros, de modo a tentar comprovar que o formulário (3) utilizava o segundo endereço de e-mail. Acontece que o endereço que aparece quando abro esse formulário, ao pressionar o botão enviar, que está dentro do formulário (1), é o endereço do primeiro registro de minha agenda, não o segundo.

    Não entendo porquê isso acontece. 


    Paulo Afonso


    sexta-feira, 26 de abril de 2013 15:40
  • No form1 você possui controles textbox, ai quando você chama o form3 ela puxa quais informações ?



    No form1 seus controles são todos textbox ?



    sexta-feira, 26 de abril de 2013 16:02
  • Sim, no Fomr1 todos são textbox. Mas quando o conteúdo que está apresentado na tela pelo txtMail.Text o que aparece no campo EmailTextBox.Text do Form3 é a informação que está no primeiro registro da base. Exemplo: tenho dois registros: o primeiro com o e-mail paulo@meireles.com.br e o segundo com um e-mail inventado antonio@ppt.com.br. Quando estou sobre o segundo registro, onde me aparece no Form1 o nome completo do "Antônio" e o respectivo e-mail (inventado), ao chamar o Form3 pelo botão enviar, aparece-me no Form3, no campo EmailTextBox paulo@meireles.com.br. 

    O que estou fazendo de errado?? 

    Valeu a força!


    Paulo Afonso

    terça-feira, 30 de abril de 2013 12:04
  • Entendi
    Os e-mail's você está puxando da base ?
    Posta seu código por gentileza.
    terça-feira, 30 de abril de 2013 13:08
  • Sim Ninho, estou puxando de uma base de dados. Explico:

    A programação da agenda pessoal parte de uma base do Access, denominada "Schedule.mdb". Nela tenho três tabelas: (1) Agenda, (2) Emails e (3) Param_email. Na primeira tabela é onde se localizam os contatos cadastrados, na segunda, o histórico de e-mails e, na terceira, as informações necessárias para configuração do "servidor" de e-mail, que já está carregada com os dados de uma conta que criei no yahoo.com. Tenho um único relacionamento de um para muitos entre as tabelas (1) e (2). 

    No [settings] de meu projeto defini uma conexão com o nome de "new_conection" com a string correspondente = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\agenda_personal\WindowsApplication1\Schedule.mdb". O projeto contém quatro formulário, sendo o primeiro o de abertura e, ainda, de cadastro e manipulação dos dados de contatos da Agenda. Nos formulário 1, 2 e 4 estou usando um BindingSource, a partir de um DataSet pré-estabelecido. Como nos formulários dois e quatro, no Form1 tenho o navegador completo (BindingNavegator), contendo as funcionalidades de movimentação e, especialmente, inserção [+], exclusão [x] e "update" [Save]. No segundo formulário, como ele corresponde à tabela de parâmetros de configuração (3) e só poderá sempre ter um único registro, o "BindingNavegator" somente dispõe de uma funcionalidade update [Save]. Já no Form4, o BindingNavegator está vinculado a um DataGrid da tabela de e-mails, onde a inclusão deve acontecer automaticamente pelo envio de uma correspondência. Assim, o BindingNavegator não tem a funcionalidade de inserção.

    O código relacionado ao Form1 é o seguinte:

    Option Explicit On
    Imports System.Data.OleDb
    
    Public Class Form1
    
        Inherits System.Windows.Forms.Form
        Dim validaciones As validarcampo = New validarcampo
        Public comprobaciones As Boolean = True     
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    
            Me.AgendaTableAdapter.Fill(Me.New_dataset.Agenda)
    
        End Sub
    
        Private Sub SaveToolStripButton_Click(sender As Object, e As System.EventArgs) Handles SaveToolStripButton.Click
    
            Me.AgendaBindingSource.EndEdit()
            Me.AgendaTableAdapter.Update(Me.New_dataset.Agenda)
    
        End Sub
    
    
        Private Sub CmdSalir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CmdSalir.Click
    
            Close()
    
        End Sub
    
    
        Private Sub Configurar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Configurar.Click
    
            Dim MiForm As New Form2
            MiForm.Show()
    
        End Sub
    
        Private Sub Enviar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Enviar.Click
    
            Dim MiForm3 As New Form3
            MiForm3.EmailTextBox.Text = txtMail.Text
            MiForm3.Show()
    
        End Sub
    
        Private Sub mem_email_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mem_email.Click
    
            Dim MiForm4 As New Form4
            MiForm4.Show()
    
        End Sub
    
        Private Sub txtNombre_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtNombre.TextChanged
    
            comprobaciones = validaciones.validartxt(txtNombre.Text.Trim, True)
    
            If comprobaciones And txtNombre.Text <> "" Then
    
                Label6.Text = "Ok"
                Label6.BackColor = Color.Transparent
    
            Else
    
                Label6.Text = "Err"
                Label6.BackColor = Color.Red
    
            End If
    
            txtNombre.Focus()
    
        End Sub
    
        Private Sub txtApellido_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtApellido.TextChanged
    
            comprobaciones = validaciones.validartxt(txtApellido.Text.Trim, True)
    
            If comprobaciones And txtApellido.Text <> "" Then
                Label8.Text = "Ok"
                Label8.BackColor = Color.Transparent
            Else
                Label8.Text = "Err"
                Label8.BackColor = Color.Red
            End If
    
            txtApellido.Focus()
    
        End Sub
    
        Private Sub txtTelefono_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTelefono.TextChanged
            comprobaciones = validaciones.validarnmr(txtTelefono.Text.Trim, False)
            If comprobaciones And txtTelefono.Text <> "" Then
                Label12.Text = "Ok"
                Label12.BackColor = Color.Transparent
            Else
                Label12.Text = "Err"
                Label12.BackColor = Color.Red
            End If
            txtTelefono.Focus()
    
        End Sub
    
        Private Sub txtMail_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtMail.TextChanged
            comprobaciones = validaciones.validar_Mail(txtMail.Text.Trim)
            If comprobaciones And txtMail.Text <> "" Then
                Label13.Text = "Ok"
                Label13.BackColor = Color.Transparent
            Else
                Label13.Text = "Err"
                Label13.BackColor = Color.Red
            End If
            txtMail.Focus()
        End Sub
    
        Private Sub cmdBuscar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdBuscar.Click
    
    	' Essa rotina não está funcionando adequadamente, pois não resulta na atualização 
    	' da tela com o registro filtrado!!!
    
            Dim NvDataView As DataView = AgendaBindingSource.DataSource
    
            NvDataView.Table = New_dataset.Tables("Agenda")
    
            Dim a As String
            a = ComboBox1.SelectedItem
    
            MessageBox.Show(a)
            If a = "Nombre" Then
    
                NvDataView.RowFilter = String.Format("Nombre LIKE  '%'", txtBuscar.Text)
    
            ElseIf a = "Apellidos" Then
    
                NvDataView.RowFilter = String.Format("apellidos LIKE  '%'", txtBuscar.Text)
    
            ElseIf a = "Teléfono" Then
    
                NvDataView.RowFilter = String.Format("telefono LIKE  '%'", txtBuscar.Text)
    
            End If
    
            NvDataView.Table.AcceptChanges()
    
        End Sub
      
    End Class

    Paulo Afonso




    terça-feira, 30 de abril de 2013 13:57
  • O Form3 está fazendo alguma conexão com a base.
    Pois se o seu form1 faz conexão e passa as informações para o form3 não teria sentido o form3 trazer informações da base.
    No evento cmdBuscar_Click vc comentou que o mesmo não está filtrando certo ? 
    Tente colocar o "%" no final também.
    • Editado Ninho_Blink quinta-feira, 2 de maio de 2013 15:00 editando
    • Marcado como Resposta Paulo Meireles quinta-feira, 2 de maio de 2013 17:17
    quinta-feira, 2 de maio de 2013 14:55
  • Ninho, 

    Realmente tinhas razão quanto à questão da conexão na Form3. Tirei o BindingSource e o TableAdapter referente à tabela "Agenda" e o EmailTextBox.Text ficou carregado com o conteúdo do txtMail.Text do Form1. 

    Mas, em relação ao procedimento de busca, está me dando um erro (Unable to cast object of type 'Agenda.new_dataset' to type 'System.Data.DataView) vinculada a linha "Dim NvDataView As DataView = AgendaBindingSource.DataSource". 

        Private Sub cmdBuscar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdBuscar.Click
    
            Dim NvDataView As DataView = AgendaBindingSource.DataSource
            NvDataView.Table = New_dataset.Tables("Agenda")
    
            ' TENGO QUE CONSEGUIR BUSCAR POR EL COMBOBOX
            ' NvDataView.RowFilter = "Nombre LIKE  '%" & txtBuscar.Text & "%'"
    
            Dim a As String
            a = ComboBox1.SelectedItem
    
            MessageBox.Show(a)
            If a = "Nombre" Then
    
                NvDataView.RowFilter = String.Format("Nombre LIKE  '%'", txtBuscar.Text & "%'")
    
            ElseIf a = "Apellidos" Then
    
                NvDataView.RowFilter = String.Format("apellidos LIKE  '%'", txtBuscar.Text & "%'")
    
            ElseIf a = "Teléfono" Then
    
                NvDataView.RowFilter = String.Format("telefono LIKE  '%'", txtBuscar.Text & "%'")
    
            End If
    
            'AgendaBindingSource.DataSource = NvDataView
            NvDataView.Table.AcceptChanges()
    
        End Sub


    Paulo Afonso

    quinta-feira, 2 de maio de 2013 17:17
  • Esse erro está ocorrendo por que você está passando um objeto do tipo data set para um objeto dataview.
    Eu não consegui entender muito bem o q vc está fazendo no código :s rsrs ainda sou novato.

    quinta-feira, 2 de maio de 2013 20:29
  • Amigo, se tu não entendes, por mais que te aches ser um novato, imagina eu! Na verdade, eu só queria fazer uma busca no base para encontrar um determinado registro e, assim que encontrado, os textbox fossem atualizados com o conteúdo do registro achado! 

    Aliás, muito obrigado por toda a força que tens me dado até aqui.

    Abraço,

    Boa noite!


    Paulo Afonso

    quinta-feira, 2 de maio de 2013 23:10
  • Opa sempre, compartilhar conhecimento né ?! rsrs
    Então geralmente eu faço assim:

            Dim conn As New MySqlConnection 'Aqui tem que ser o do sql,pois fiz conexão com o do mysql
            Dim myCommand As New MySqlCommand 
            Dim dS As MySqlDataReader
            Dim palavra As String   


                 conn.ConnectionString = "Sua String de Conexão"

            
                'Passando o select e a conexão
                myCommand = New MySqlCommand("Seu Select com a condição", conn)
                conn.Open()

                dS = myCommand.ExecuteReader
                'dS.Read()
                palavra = dS.GetString(0)
                Return palavra

    Qualquer coisa tem o link :

    http://www.youtube.com/watch?v=guQPjwCh7VY

    Vê se consegue com esse código, ai posta aqui
    • Marcado como Resposta Paulo Meireles sexta-feira, 3 de maio de 2013 17:41
    sexta-feira, 3 de maio de 2013 11:54
  • Ninho, obrigado pela força! O último comando acabei não utilizando, porque com o vídeo que sugerisses por último, acabei alterando a programação. Falta-me fazer alguns ajustes, mas assim que tiver tudo pronto, posto aqui o resultado final (se assim o quiseres). Obrigadão mais uma vez.

    Paulo Afonso

    sexta-feira, 3 de maio de 2013 17:43
  • Opa que bom que ajudou
    Quero sim, posta ai como ficou, ai serve de conhecimento pra mim tb rsrs
    sexta-feira, 3 de maio de 2013 17:45