Jump to content

Fechar Formulário antes do Loading


laboss
 Share

Recommended Posts

Boas ppl mais uma vez tenho uma duvida :S ta mau para os meus lados 😁

Então e o seguinte, tenho um formulário que e um MDIParent que corre um procedimento e nesse procedimento tenho uma rotina que esta dentro de um try e o que queria era que se o catch fosse disparado ele me fecha-se o formulario, mas ta a dar um erro se meter o ME.Close no catch:

Erro:

Não é possível chamar o valor Close() ao executar CreateHandle().

Codigo

Public Class Lista_Clientes
    Private Sub CarregarClientes()
        Dim Ligacao As New SqlConnection(ConnectionString)
        Try
            Ligacao.Open()

            Dim Comando As New SqlCommand()
            With Comando
                .CommandText = "SELECT C_ID, " & _
                                       "C_Codigo, " & _
                                       "C_Nome, " & _
                                       "C_Morada + ', Nº '  +CONVERT(nvarchar(10),C_NumeroPorta) + ', ' + C_Andar AS C_Morada_Full, " & _
                                       "CASE CONVERT(nvarchar(10), C_Tlf) WHEN '' THEN C_Tlm ELSE C_Tlf END AS C_N_Contacto, " & _
                                       "C_NIF " & _
                                    "FROM [dbo].[Cliente3s]"
                .CommandType = CommandType.Text
                .Connection = Ligacao
            End With

            Dim Adapter As New SqlDataAdapter(Comando)
            Adapter.Fill(DataSetClientes, "Utilizadores")

            Me.BindingSource1.DataSource = DataSetClientes.Tables(0)
            Me.dgvData.DataSource = Me.BindingSource1

            Modifica_Nome_Colunas_DataGrid()

            ToolStripStatusLabel2.Text = dgvData.RowCount

            EstilizarRows()
        Catch ex As Exception
            Dim Dialog As New BestDialog()
            With Dialog
                .Owner = Me
                       End With

            Dim Resultado As DialogResult = Dialog.Show()
            If Resultado = Windows.Forms.DialogResult.OK Then
                Me.Close()
            End If

        End Try
    End Sub

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

    End Sub

Obrigado

Link to comment
Share on other sites

    Boa noite

Catch ex As Exception
            Dim Dialog As New BestDialog()
            With Dialog
                .Owner = Me
                       End With

            Dim Resultado As DialogResult = Dialog.Show()
            If Resultado = Windows.Forms.DialogResult.OK Then
                
             'nome do teu form.close em vez de Me.Close pois ele nesse caso dá a ideia que se está a referir à caixa de dialogo que foi aberta no catch, em vez de ao formulário.
              _Me.Close()
            End If

        End Try

    Tenta assim, não tenho a certeza, pois não testei o codigo, li e apercebi-me deste detalhe.

Cordiais cumprimentos,

Apocsantos

"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Link to comment
Share on other sites

    Bom dia,

    Ok, eu pensei que ele ainda estivesse a referir-se á caixa de dialogo como objecto activo. Se o objectivo é fechar a form, o dispose deveria fazer o mesmo efeito, penso.

Catch ex As Exception
            Dim Dialog As New BestDialog()
            With Dialog
                .Owner = Me
                       End With

            Dim Resultado As DialogResult = Dialog.Show()
            If Resultado = Windows.Forms.DialogResult.OK Then
                
              Me.Dispose()
            End If

        End Try

    Como é para lidar com uma excepção, que indica que algo não aconteceu como deveria, o close deixaria o form em memória "pendurado", por não saber ao certo o que lhe haveria de fazer, pois não o conseguiria preparar para fechar normalmente. O dispose, faz ao form algo semelhante ao que o kill faz a um processo.

      Hoje com menos dores e cabeça, já raciocino melhor! 😁No caso das excepções deve ser usado o Dispose e não o close, pelo menos segundo o que eu aprendi! 🙂

    Qualquer coisa ainda andarei por cá ou pelo IRC.

Cordiais cumprimentos,

Apocsantos

"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Link to comment
Share on other sites

    Bom dia,

    Faz copy-past do erro que tens no Visual Studio, para cá. Estou a ficar curioso 😁

Cordiais cumprimentos,

Apocsantos

"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.