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

sergiofer

Eventos

Recommended Posts

sergiofer

Olá a todos

Tenho uma variavel global, que é alterada, por uma thread diferente da principal, e essa variavel deveria actualizar uma textbox, sempre que fosse alterada, existe alguma maneira de activar um evento, sempre que o valor dessa variavel for alterado?

Ou então existe alguma maneira de uma thread alterar uma textbox que foi criada na thread principal?

Obrigado desde já

Share this post


Link to post
Share on other sites
scorch

Podes alterar através de outra thread usando Delegates. Nunca os usei, mas já li sobre isso. :thumbsup:

Google


scorch_pp.png

PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum.

Share this post


Link to post
Share on other sites
ribeiro55

    Private Delegate Sub FazerQualquerCoisa()

    Private Sub Chamada()
        If Me.InvokeRequired = True Then
            Me.BeginInvoke(New FazerQualquerCoisa(AddressOf AplicarAlteracoes))
        End If
    End Sub

    Private Sub AplicarAlteracoes()
        'Altera aqui o que quiseres no thread onde o GUI foi criado
    End Sub

Usei uma coisa parecida com isto para apanhar devoluções de chamadas assíncronas à lib OpenMetaVerse.

A traços largos, o InvokeRequired define se a chamada está no thread certo, ou não, e se/quando estiver, tumbas!

O Sub Chamada pode ser um handler de um evento, como pretendes.

Podes passar argumentos também, obviamente.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
Ziwdon

Aconselho-te a pesquisar e a ler sobre threads. É um assunto..."sensível".


"Rejoice not against me, O mine enemy: when I fall, I shall arise; when I sit in darkness, the LORD shall be a light unto me." - Micah 7:8 (KJV)

Share this post


Link to post
Share on other sites
sergiofer

Estive a testar e não tive grandes resultados, por isso alterei ligeiramente o modo de funcionamento, pelo menos por agora, para poder efectuar mais testes.

Neste momento, o que eu necessito de fazer é despoletar um evento, sempre que o valor de uma variavel global é alterado, algo tipo o "textchanged" de uma textbox, alguém me pode orientar, sobre como fazer isto?

Peço desculpa se a pergunta parecer demasiado básica, mas não estou a conseguir.

Obrigado a todos pelo interesse

Share this post


Link to post
Share on other sites
ribeiro55

Toma lá um exemplo parvo, saído à pressão, mas que vai concerteza deixar uma ideia de como é que as coisas funcionam.

Escrevi-te dois métodos: adicionando um handler ou ter um sub com um handler específico. É uma questão de pensares a utilidade e adaptares à tua necessidade.

Se usares a sub com o handler específico, não precisas de adicionar o handler, e se adicionares o handler, não precisas de dar o handler específico ao sub.

Se meteres os dois ao mesmo tempo, como no exemplo, são te os dois disparados. E quem diz dois diz dois mil.

Public Class Form1

    Private Event ClickNoForm(ByVal X As Integer, ByVal Y As Integer)

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        AddHandler Me.ClickNoForm, AddressOf FormClicado
    End Sub

    Private Sub FormClicado(ByVal X As Integer, ByVal Y As Integer)
        MsgBox(String.Format("Detectado clique em x={0} e y={1}", X, Y))
    End Sub

    Private Sub FormClicadoMetodo2(ByVal X As Integer, ByVal Y As Integer) Handles Me.ClickNoForm
        MsgBox(String.Format("(Método 2) Detectado clique em x={0} e y={1}", X, Y))
    End Sub

    Private Sub Form1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseClick
        RaiseEvent ClickNoForm(e.X, e.Y)
    End Sub

End Class


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
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

×

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.