none
Como chamar um formulario com o metodo show dentro do formulario principal? RRS feed

  • Pergunta

  • ola bom dia!

    Eu tenho um formulario com datagridview, estou apartir do outro formulario quando tento exibir para preencher as textbox so consigo fazer isso usando o Shodialog, so que usando o show dialog ele não permite fazer mais nada enquanto o formulario estiver aberto, como faço para abrir em modo normal, exibir e permitir trabalhar sem bloquear?

    eu fiz assim, mas não ta a dar certo:

    eu fiz assim:

       PrivateSub TxtCodigoProvincia_KeyDown(senderAsObject, eAsKeyEventArgs)Handles TxtCodigoProvincia.KeyDown

           'aqui ao premirmos a tecla f2 abrimos o formulario com a lista dos paises

           If e.KeyCode =Keys.F2Then

               'exibimos o formulario lista de actividades, e a variavel deste formulario foi declarada no cabeçario do formulario

               FrmListaProvincias.MdiParent = FrmPRINCIPAL

               listFormProvincias.ShowDialog()

               'aqui exibimos os dados nas textbox

               TxtCodigoProvincia.Text = listFormProvincias.DGVListaProvincia.CurrentRow.Cells(0).Value.ToString

               TxtCodigoContinenteProvincia.Text = listFormProvincias.DGVListaProvincia.CurrentRow.Cells(1).Value.ToString

               TxtCodigoPaisProvincia.Text = listFormProvincias.DGVListaProvincia.CurrentRow.Cells(2).Value.ToString

               TxtSiglaProvincia.Text = listFormProvincias.DGVListaProvincia.CurrentRow.Cells(3).Value.ToString

               TxtDescriçãoProvincia.Text = listFormProvincias.DGVListaProvincia.CurrentRow.Cells(4).Value.ToString

               listFormProvincias.DGVListaProvincia.Columns.Clear()

               ' listFormProvincias.DGVListaProvincia.Rows.Clear()

           EndIf

           'Aqui ao premirmos a tecla escap limpamos as textboxes

           If e.KeyCode =Keys.EscapeThen

               LimparProvincia()

               listFormProvincias.DGVListaProvincia.Columns.Clear()

               ' listFormProvincias.DGVListaProvincia.Rows.Clear()

           EndIf

    aqui o codigo do botão que exibe a lista dos paises, eu não quero exibir os formularios em show dialog. porque em sho dialog não permite fazer mais nada enquanto estiver ativo o formulario.

       PrivateSub btnLocalizarPaisProvincia_Click(senderAsObject, eAsEventArgs)Handles btnLocalizarPaisProvincia.Click

           TxtCodigoPaisProvincia.Focus()

           FrmListaPaises.MdiParent = FrmPRINCIPAL

           listFormPaises.ShowDialog()

           TxtCodigoPaisProvincia.Text = listFormPaises.DGVListaPaises.CurrentRow.Cells(0).Value.ToString

           listFormPaises.DGVListaPaises.Columns.Clear()

           ' listFormPaises.DGVListaPaises.Rows.Clear()

       EndSub

       PrivateSub btnLocalizarPaisProvincia_Click(senderAsObject, eAsEventArgs)Handles btnLocalizarPaisProvincia.Click

           TxtCodigoPaisProvincia.Focus()

           FrmListaPaises.MdiParent = FrmPRINCIPAL

           listFormPaises.ShowDialog()

           TxtCodigoPaisProvincia.Text = listFormPaises.DGVListaPaises.CurrentRow.Cells(0).Value.ToString

           listFormPaises.DGVListaPaises.Columns.Clear()

           ' listFormPaises.DGVListaPaises.Rows.Clear()

       EndSub

    alguem pode ajudar?

    Obrigado


    Daniel Rosa Iniciante de programação em vb.net, linq sql e Sql server

    segunda-feira, 10 de fevereiro de 2014 11:44

Respostas

  • Você pode fazer algo assim:

           TxtCodigoPaisProvincia.Focus()
           FrmListaPaises.MdiParent = FrmPRINCIPAL
           listFormPaises.Show()
           AddHandler listFormPaises.Closed, New EventHandler(Sub(s As Object, ee As EventArgs)
                                                                   TxtCodigoPaisProvincia.Text = listFormPaises.DGVListaPaises.CurrentRow.Cells(0).Value.ToString
                                                                   listFormPaises.DGVListaPaises.Columns.Clear()
                                                                   'listFormPaises.DGVListaPaises.Rows.Clear()
                                                              End Sub)

    Herbert Lausmann

    • Sugerido como Resposta Herbert Lausmann quinta-feira, 20 de fevereiro de 2014 14:26
    • Marcado como Resposta danielbeneditorosa quinta-feira, 20 de fevereiro de 2014 21:05
    quarta-feira, 19 de fevereiro de 2014 14:36

Todas as Respostas

  • Olá!

    O método show do Form não bloqueia a tela que chamou ele. Já tentou isso?

    terça-feira, 18 de fevereiro de 2014 21:35
  • boa noite e obrigado!

    Podes dar um exemplo de como ficaria?

    Obrigado


    Daniel Rosa Iniciante de programação em vb.net, linq sql e Sql server

    terça-feira, 18 de fevereiro de 2014 22:59
  • Oi.

    var form = new Windows.Form();
    form.Show()

    Só que dessa maneira o programa não vai esperar o dialogo fechar para ir para a proxima linha.

    Então isso não vai funcionar... você vai ter que pensar entra outra maneira.

      listFormPaises.ShowDialog()
           TxtCodigoPaisProvincia.Text = listFormPaises.DGVListaPaises.CurrentRow.Cells(0).Value.ToString
    terça-feira, 18 de fevereiro de 2014 23:06
  • É isso que você quer?

       Private Sub btnLocalizarPaisProvincia_Click(senderAsObject, eAsEventArgs)Handles btnLocalizarPaisProvincia.Click
           TxtCodigoPaisProvincia.Focus()
           FrmListaPaises.MdiParent = FrmPRINCIPAL
           listFormPaises.Show() 'Use a função Show
           TxtCodigoPaisProvincia.Text = listFormPaises.DGVListaPaises.CurrentRow.Cells(0).Value.ToString
           listFormPaises.DGVListaPaises.Columns.Clear()
           ' listFormPaises.DGVListaPaises.Rows.Clear()
       End Sub
    
       Private Sub btnLocalizarPaisProvincia_Click(senderAsObject, eAsEventArgs)Handles btnLocalizarPaisProvincia.Click
           TxtCodigoPaisProvincia.Focus()
           FrmListaPaises.MdiParent = FrmPRINCIPAL
           listFormPaises.Show() 'Use a função Show
           TxtCodigoPaisProvincia.Text = listFormPaises.DGVListaPaises.CurrentRow.Cells(0).Value.ToString
           listFormPaises.DGVListaPaises.Columns.Clear()
           ' listFormPaises.DGVListaPaises.Rows.Clear()
       End Sub

    Herbert Lausmann

    terça-feira, 18 de fevereiro de 2014 23:10
  • bom dia e obrigado!

    eu quero assim porque quando eu uso o

           listFormPaises.ShowDialog()
           TxtCodigoPaisProvincia
    .Text = listFormPaises.DGVListaPaises.CurrentRow.Cells(0).Value.ToString

    o formulario não abre dentro do formulario principal , mas funciona normalmente sem problemas.

    agora quando faço assim:

     Private Sub btnLocalizarPaisProvincia_Click(senderAsObject, eAsEventArgs)Handles btnLocalizarPaisProvincia.Click
           TxtCodigoPaisProvincia
    .Focus()
           FrmListaPaises
    .MdiParent = FrmPRINCIPAL
           listFormPaises
    .Show() 'Use a função Show
           TxtCodigoPaisProvincia
    .Text = listFormPaises.DGVListaPaises.CurrentRow.Cells(0).Value.ToString
           listFormPaises
    .DGVListaPaises.Columns.Clear()
          
    ' listFormPaises.DGVListaPaises.Rows.Clear()
      
    End Sub

      
    Private Sub btnLocalizarPaisProvincia_Click(senderAsObject, eAsEventArgs)Handles btnLocalizarPaisProvincia.Click
           TxtCodigoPaisProvincia
    .Focus()
           FrmListaPaises
    .MdiParent = FrmPRINCIPAL
           listFormPaises
    .Show() 'Use a função Show
           TxtCodigoPaisProvincia
    .Text = listFormPaises.DGVListaPaises.CurrentRow.Cells(0).Value.ToString
           listFormPaises
    .DGVListaPaises.Columns.Clear()
          
    ' listFormPaises.DGVListaPaises.Rows.Clear()
      
    End Sub

    ele abre dentro do formulario principal, so que esta sempre a selecionar o primeiro registro do datagridview, não sei o porque esta a acontecer isso, no meu datagrid tem este codigo que se calhar é onde esta o problema:

    codigo do datagridview:

    Private Sub DGVListaPaises_DoubleClick(sender As Object, e As EventArgs) Handles DGVListaPaises.DoubleClick

            'aqui estamos a dizer que ao fazermos duplo clique selecionamos o dado e fechamos o formulario

            Me.Tag = DGVListaPaises.Focused.ToString()

            Me.DialogResult = DialogResult.OK

            Me.Close()

        End Sub

        Private Sub DGVListaPaises_KeyPress(sender As Object, e As KeyPressEventArgs) Handles DGVListaPaises.KeyPress

            'Aqui estamos a dizer que quando premimos a tecla enter selecionamos o dado no datagrid e fechamos o formulario

            If e.KeyChar = Chr(13) Then

                Me.Tag = DGVListaPaises.Focused.ToString()

                Me.DialogResult = DialogResult.OK

                Me.Close()

            End If

        End Sub

    sera que devo mexer alguma coisa no datagridview?

    bom dia e obrigado.

    ou se existir uma maneira de xibir o formulario em showdialog dentro do formulario principal...

    Obrigado


    Daniel Rosa Iniciante de programação em vb.net, linq sql e Sql server

    quarta-feira, 19 de fevereiro de 2014 07:05
  • Entenda uma coisa:

    Quando você chama o ShowDialog() ele só retorna a execução para o método que o chamou depois do form ser fechado.

           TxtCodigoPaisProvincia.Focus()
           FrmListaPaises.MdiParent = FrmPRINCIPAL
           listFormPaises.ShowDialog()
           TxtCodigoPaisProvincia.Text = listFormPaises.DGVListaPaises.CurrentRow.Cells(0).Value.ToString 'Só depois do form ser fechado é que isso será executado.
           listFormPaises.DGVListaPaises.Columns.Clear()
           ' listFormPaises.DGVListaPaises.Rows.Clear()

    Agora usando o método Show() ele abre o form e ja continua a execução:

           TxtCodigoPaisProvincia.Focus()
           FrmListaPaises.MdiParent = FrmPRINCIPAL
           listFormPaises.Show()
           TxtCodigoPaisProvincia.Text = listFormPaises.DGVListaPaises.CurrentRow.Cells(0).Value.ToString ' Ao abrir o form continua este código em seguida, sem esperar ele fechar...
           listFormPaises.DGVListaPaises.Columns.Clear()
           ' listFormPaises.DGVListaPaises.Rows.Clear()

    Creio que deve ser este o seu problema.


    Herbert Lausmann

    quarta-feira, 19 de fevereiro de 2014 11:41
  • ok. obrigado!

    e qual seria a solução? ou não tem solução?


    Daniel Rosa Iniciante de programação em vb.net, linq sql e Sql server

    quarta-feira, 19 de fevereiro de 2014 14:16
  • Você pode fazer algo assim:

           TxtCodigoPaisProvincia.Focus()
           FrmListaPaises.MdiParent = FrmPRINCIPAL
           listFormPaises.Show()
           AddHandler listFormPaises.Closed, New EventHandler(Sub(s As Object, ee As EventArgs)
                                                                   TxtCodigoPaisProvincia.Text = listFormPaises.DGVListaPaises.CurrentRow.Cells(0).Value.ToString
                                                                   listFormPaises.DGVListaPaises.Columns.Clear()
                                                                   'listFormPaises.DGVListaPaises.Rows.Clear()
                                                              End Sub)

    Herbert Lausmann

    • Sugerido como Resposta Herbert Lausmann quinta-feira, 20 de fevereiro de 2014 14:26
    • Marcado como Resposta danielbeneditorosa quinta-feira, 20 de fevereiro de 2014 21:05
    quarta-feira, 19 de fevereiro de 2014 14:36
  • como fazer o mesmo usando o metodo show! é possivel aplicar isso usando o metodo show?

    Daniel Rosa Iniciante de programação em vb.net, linq sql e Sql server

    quarta-feira, 19 de fevereiro de 2014 14:39
  • como fazer o mesmo usando o metodo show! é possivel aplicar isso usando o metodo show?

    Daniel Rosa Iniciante de programação em vb.net, linq sql e Sql server

    Testou o código que eu postei? Ele deve ser a solução para você usar o método Show()...

    Herbert Lausmann

    quarta-feira, 19 de fevereiro de 2014 14:42
  • obrigado, vou ja tentar este codigo e daqui a pouco de digo se funcionou, muito obrigado

    boa tarde e boa continuação....


    Daniel Rosa Iniciante de programação em vb.net, linq sql e Sql server

    quarta-feira, 19 de fevereiro de 2014 14:57
  • Bom dia Herbert  Lausmann, muito obrigado!

    este codigo resolveu o meu problema,  e esta assim:

     

    Private Sub btnLocalizarPaisProvincia_Click(sender As Object, e As EventArgs) Handles btnLocalizarPaisProvincia.Click

            TxtCodigoPaisProvincia.Enabled = True

            TxtCodigoPaisProvincia.Focus()

            listFormPaises = New FrmListaPaises

            listFormPaises.MdiParent = FrmPRINCIPAL

            Try

                listFormPaises.Show()

                AddHandler listFormPaises.Closed, New EventHandler(Sub(s As Object, ee As EventArgs)

                                                                       TxtCodigoPaisProvincia.Text = listFormPaises.DGVListaPaises.CurrentRow.Cells(0).Value.ToString

                                                                       listFormPaises.DGVListaPaises.Columns.Clear()

                                                                       'listFormPaises.DGVListaPaises.Rows.Clear()

                                                                   End Sub)

            Catch ex As Exception

                MsgBox("erro  : " & ex.Message, MsgBoxStyle.Exclamation)

            End Try

        End Sub

    Obrigado e muito obrigado!


    Daniel Rosa Iniciante de programação em vb.net, linq sql e Sql server

    • Sugerido como Resposta Herbert Lausmann quinta-feira, 20 de fevereiro de 2014 14:26
    quinta-feira, 20 de fevereiro de 2014 13:52
  • Se a resposta solucionou seu problema por favor marque-a como resposta para fechar a thread e colaborar com o fórum.


    Herbert Lausmann


    quinta-feira, 20 de fevereiro de 2014 14:30