none
Form não abre 2 vezes! RRS feed

  • Pergunta

  • Pessoal,

     

    estou chamando um form secundário pelo mainmenu no form principal da aplicação, na primeira vez abre normalmente, mas se fechar o form e tentar abrir de novo ele não abre o que poderia ser?

    sábado, 12 de maio de 2007 17:42

Todas as Respostas

  • Oi !

     

    Vou responder baseado em windows forms, mas acho que a causa é a mesma : Os formulários são classes suicidas. Quando são fechados, se destroem internamente (fazem dispose) e por isso não abrem mais.

     

    Faça a abertura da seguinte forma :

     

    Code Snippet

    if isnothing(frm) orelse frm.isdisposed then

        frm=new form1()

    end if

    frm.show

     

     

     

    []'s

     

    sábado, 12 de maio de 2007 20:52
  • Dennes,

     

    grato pelo retorno mas não compreendi sua explicação, tentei aplicar o código mas o frm.isdisposed não é reconhecido.

    Porque a linha frm= new form1()?

     

     

    sábado, 12 de maio de 2007 22:48
  • Oi !

     

    form1 é seu suposto form, frm é uma variável declarada como sendo form1 a nível de form e este código é para o item de menu que irá abrir o seu form.

     

    []'s

     

     

    sábado, 12 de maio de 2007 23:06
  • Dennes,

     

    desculpe a insistencia mas só assim aprendemos! rs

    ainda não peguei a idéia

    porque o ".isdisposed" não é reconhecido?

    o meu form é o frmCadReceita, como deve ficar o código?

    sábado, 12 de maio de 2007 23:39
  • Oi !

     

    Você está usando VB ou C# ?

     

    []'s

     

    domingo, 13 de maio de 2007 00:02
  • VB
    domingo, 13 de maio de 2007 00:10
  • Oi !

     

    Testei o isdisposed e realmente não funciona, vou verificar porque.

     

    Você não mostrou ainda seu código para abrir o formulário, mas testei aqui um simples form2.show e funcionou perfeitamente, com o form abrindo quantas vezes eu desejasse.

     

    []'s

     

     

    domingo, 13 de maio de 2007 01:52
  • segue:

     

    Code Snippet

    Private Sub mnCadReceitas_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnCadReceitas.Click

    'Dim frm As New Form

    'If IsNothing(frm) Then

    'frm = frmCadReceita

    'End If

    frmCadReceita.Show()

     

     

    frmCadReceita.Show()

    End Sub

     

    domingo, 13 de maio de 2007 03:33
  • Oi !

     

    Por que o show 2 vezes ?

     

    Quando você diz "não abre 2 vezes" você quer dizer que deseja exibir duas instâncias dele, é isso ?

     

    Esse caso, do show 2 vezes, realmente não vai funcionar. Você precisaria de algo como :

     

    Code Snippet

    dim frm as new frmCadReceita

    dim frm2 as new frmCadReceita

     

    frm.show

    frm2.show

     

     

    []'s

     

    domingo, 13 de maio de 2007 09:37
  • ops,

     

    deixei a linha 2 vezes sem querer! o que eu preciso é fechar o form e conseguir abrir novamente!

    domingo, 13 de maio de 2007 13:15
  • Oi !

     

    Pois então, a linha encontra-se ali só uma vez, certo ?

     

    Pois eu fiz o teste aqui exatamente desta forma e não tive problema algum.

     

    Pode ser algo no load do form que esteja errado, ou algo assim, tente fazer um passo-a-passo.

     

    []'s

     

     

    domingo, 13 de maio de 2007 13:24
  • o código todo

     

    Code Snippet

    Imports System.Data.SqlServerCe

    Imports System.IO

    Public Class frmPrincipal

    Private Sub frmPrincipal_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    Dim vCaminho As String

    Dim vConexao As String

    Dim sql As String

     

    'Capturar o diretório da aplicação

    vCaminho = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)

    'Cria base de dados SQL

    vConexao = "Data Source=" & vCaminho & "\financ.sdf"

    Try

    If Not File.Exists(vCaminho & "\financ.sdf") Then

    Dim SqlCeEngine As New SqlCeEngine(vConexao)

    SqlCeEngine.CreateDatabase()

    Dim conn As New SqlCeConnection(vConexao)

    conn.Open()

    'Cria tabela Receitas

    sql = "CREATE TABLE Receitas (IdReceita int Primary Key NOT NULL, NmReceita nvarchar(40) NOT NULL)"

    Dim cmd As New SqlCeCommand(sql, conn)

    cmd.ExecuteNonQuery()

    'Cria tabela Despesas

    sql = "CREATE TABLE Despesas (IdDespesa int Primary Key NOT NULL, NmDespesa nvarchar(40) NOT NULL)"

    cmd.CommandText = sql

    cmd.ExecuteNonQuery()

     

     

    conn.Close()

    End If

    Catch ex As Exception

    MessageBox.Show(ex.Message)

    End Try

     

    End Sub

    Private Sub mnCadReceitas_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnCadReceitas.Click

    'Dim frm As New Form

    'If IsNothing(frm) Then

    'frm = frmCadReceita

    'End If

    frmCadReceita.Show()

     

     

     

    End Sub

    End Class

     

    domingo, 13 de maio de 2007 14:03
  • Oi !

     

    Você me enviou o código do form principal.

     

    Se existe algum erro pode estar no código (load, closing, closed) do frmCadReceita.

     

    []'s

     

    domingo, 13 de maio de 2007 14:17
  • verdade!

     

    Code Snippet

    Public Class frmCadReceita

    Private Sub frmCadReceita_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    InputPanel1.Enabled = True

    End Sub

    Private Sub frmCadReceita_Closed(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Closed

    InputPanel1.Enabled = False

    Me.Close()

    End Sub

    End Class

     

    domingo, 13 de maio de 2007 19:21
  • Oi !

     

    A única coisa estranha é a existência de um me.close() dentro do evento closed, isso não deveria estar ali.

     

    O resto está normal.

     

    []'s

     

    domingo, 13 de maio de 2007 19:42
  • então,

     

    já revisei o código várias vezes e ainda não achei o problema, não sei se pode ser alguma referência ou algo parecido...

    domingo, 13 de maio de 2007 19:51
  • Oi !

     

    Retirou o me.close ?

     

    Não houve resultado ?

     

    []'s

     

    domingo, 13 de maio de 2007 21:29
  • não alterou em nada..... agora to curioso pra resolver.....
    domingo, 13 de maio de 2007 22:49
  • Dennes,

     

    é correto utilizar a propriedade do form minimizebox = false?

    domingo, 13 de maio de 2007 23:15
  • Dennes,

     

    ainda estou com o mesmo problema, troquei de aparelho, comprei um palm treo 750 e o problema permanece.....

    quarta-feira, 23 de maio de 2007 01:43