• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

rui_fernandes

[vb.net 2003] Eventos do FORM...

9 mensagens neste tópico

Boas...

Nao me sabem dizer qual o evento do form depois do load??

tem o load, mas eu keria um que fosse depois do load...

nao sei se isto e possivel...

cumps.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o activate ja conhecia...

mas ao preencher a datagrid que esta no form, fica um bocado lento.

mas o "shown" nao consta nos eventos.... :S

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não sei se o evento Shown apenas aparece a partir do VB8.Se está lento poderás contornar isso usando uma thread.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bom dia...

nao sei trabalhar c issu...

sera que me pudias dar umas luzes?

tipo, um bloco de codigo e dizes resumidamente para que serve...

e/ou uns links onde esteja bem explicito..

cumps...  :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Um exemplo simples é por uma label a receber um valor que está a ser incrementado.

Podias fazer isso sem threads, mas só ias ver o último valor antes da função terminar, pois só aí actualizava. Para dar volta a isso, usas uma thread.

Quando executas a aplicação, ela corre na thread principal, por isso como vais precisar de actualizar um valor de um objecto que foi criado na thread principal através de outra, vais ter que delegar funções ou procedimentos, de forma a teres acesso ao objecto.

Avançando para o código...

Primeiro de tudo, há que importar o System.Threading.

Imports System.Threading

Para incrementar o valor usei isto

Private Sub incrementar()
        While Not parar
            Invoke(New actualizarLabelHandler(AddressOf actualizarLabel), New Object() {a})
            a += 1
        End While
    End Sub

O Invoke é usado para poderes enviar o valor para o objecto que está a correr na thread principal, senão fizeres isto e tentares fazer directamente o Label1.Text = a, vai-te dar um erro.

Para entao actualizares a label, crias um novo procedimento

Private Sub actualizarLabel(ByVal valor As Integer)
        Label1.Text = valor
    End Sub

E também tens que o delegar.

- Delegação: É uma função similar aos ponteiros do C++, as delegações são normalmente usadas para gerenciamento de evento e retornos.

Private Delegate Sub actualizarLabelHandler(ByVal valor As Integer)

Declaras 2 variaveis que sao necessárias no código que fiz em cima

Private a As Integer = 0
    Private trd As Thread = Nothing

Por fim, adicionas 2 botões. No 1º metes isto:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        trd = New Thread(AddressOf incrementar)
        trd.Start()
    End Sub

No 2º

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        trd.Abort()
    End Sub

Bem, tá assim um bocado à pressa, mas n dá pra mais por agora. Ve la se te ajuda.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Axo que percebi +-...

mas para o que eu quero penso que nao faz grande diferenca...n sei...

e nao sei se da pa faxer sequer...na volta teria que alterar o codigo que tenho...

tipo, tenho o codigo para mostrar numa datagrid :

Function mostrarDataGrid(ByVal Sql As String, ByVal grid As DataGrid)

        Dim DS As DataSet = New DataSet
        Dim DA As OleDbDataAdapter = New OleDbDataAdapter
        DA.SelectCommand = New OleDbCommand(Sql, coneccaoBD)
        DA.Fill(DS)
        grid.DataSource = DS.Tables(0)

        DA.Dispose()
        DS.Dispose()
    End Function

e o codigo para mostrar sempre na datagrid (que no fundo e um actualizar) sempe k o FORM for activado :

    Private Sub frm_percursos_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Activated
        Try
            'ligar à base de dados
            ligarBD("gestao.mdb")
            mostrarDataGrid("SELECT percurso.design_percurso,no_inicial.noi,no_final.nof FROM percurso,no_inicial,no_final WHERE percurso.cod_noi=no_inicial.cod_noi AND percurso.cod_nof=no_final.cod_nof", DataGridPercursos)
            desligarBD()
        Catch err As System.Exception
            MsgBox(err.Message)
        End Try
    End Sub

Como e que vou enquadrar aki a thread's?

e sera que n fica lento este processo?

:hmm:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas tipo, isto funciona perfeitamente...

o unico mal e quando o form e abeerto a 1º vez, fica lento pk esta a preencher a datagrid...

mas como me sugeriste para criar a thread...

n sei que fazer...

se sera uma boa opcao ou nao...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O procedimento que te mostrei para actualizar a label, podes substituir para o teu mostrarDataGrid. Acho q é uma opção a ter em conta.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora