Jag har två Forms eller kanske tre .... som jag från class vill starta en händelse i vardera form. Hur gör man? Du deklarerar ett event som formsen sedan får haka upp sig på. Precis som vilket event som helst. Ursäkta min tröghet... En påhittad funktion som du måste ersätta med någonting :) på något sätt måste dina forms få en referens till din instans av din klass, och det måste vara samma instans. Ett sätt att lösa det på är att du i skapar en funktion på varje form som tar emot en variabel av den typ din klass är Googlade lite på "onx" ... lesbians on extasy ... Alltså, den OnMittEvent som du deklarerade, anropa den så "körs" eventet Alltså, anropa bara den OnMittEvent som du deklarerade förut För bekymmer men "Me" i "RaiseEvent MittEvent(Me, EventArgs.Empty)" från em modul Hm, moduler är statiska klasser så då finns det ingen instans, och då inget me. Kör med nothing istället nu så. det funkar fint. Jag tackar för fin support och bra tålamod! trevlig helg! Men .... Mjo, du du kör eventet i en av form_load så är det förväntat beteende Du måste använda invoke eller begininvoke så det körs från rätt tråd Om inte någon annan svarat innan dess så påminn mig imorgon kväll, lite svårt att skriva kod på mobilen :pBroadcasting internt i programmet
Fångar upp en händelse och bearbetar denna. Vill skicka en flagga till vissa delar i programmet samtidigt.
Nu är det ända jag kan komma på är att varje programdel har en timer som läser av värdet i en låda som ligger i en modul.
Frågan är om det finns något snyggare sätt?Sv:Broadcasting internt i programmet
Sv: Broadcasting internt i programmet
(Events är bara en "multicastdelegate", dvs. alltifrån noll (null) till "oändligt" antal delegates. När man triggar ett event så anropas alla delegates i tur och ordning.)
Pseudokod:
Classen:
public event EventHandler MittEvent;
private void OnMittEvent()
{
if(this.MittEvent!=null)
this.MittEvent(this, EventArgs.Empty);
}
forms:
Classen classen = this.GetMyClassen(); //hur du nu får tag på en instans av den där klassen
classen.MittEvent += new EventHandler(this.MinEventHandlerFörMittEvent);
private void MinEventHandlerFörMittEvent(object sender, EventArgs e)
{
MessageBox.Show("Anropad");
}Sv:Broadcasting internt i programmet
Classen
<code>
Public Event MittEvent As EventHandler
Private Sub OnMittEvent()
RaiseEvent MittEvent(Me, EventArgs.Empty)
End Sub
</code>
Form1
<code>
Dim classen As Classen = Me.GetMyClassen()
AddHandler classen.MittEvent, AddressOf Me.MinEventHandlerFörMittEvent
Private Sub MinEventHandlerFörMittEvent(ByVal sender As Object, ByVal e As EventArgs)
MessageBox.Show("Anropad 1")
End Sub
</code>
Form2
<code>
Dim classen As Classen = Me.GetMyClassen()
AddHandler classen.MittEvent, AddressOf Me.MinEventHandlerFörMittEvent
Private Sub MinEventHandlerFörMittEvent(ByVal sender As Object, ByVal e As EventArgs)
MessageBox.Show("Anropad 2")
End Sub
</code>
Vad är "Dim classen As Classen = Me.GetMyClassen()" ?Sv: Broadcasting internt i programmet
Sv:Broadcasting internt i programmet
Tyvärr totalt off. Sv: Broadcasting internt i programmet
Sv: Broadcasting internt i programmet
Sv:Broadcasting internt i programmet
<code>
Module Module1
Public Event MittEvent As EventHandler
Private Sub OnMittEvent()
RaiseEvent MittEvent(Me, EventArgs.Empty)
End Sub
End Module
</code>Sv: Broadcasting internt i programmet
Sv:Broadcasting internt i programmet
Sv: Broadcasting internt i programmet
<code>
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Form2.Show()
Form3.Show()
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
OnMittEvent()
End Sub
End Class
</code>
<code>
Public Class Form2
Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
AddHandler MittEvent, AddressOf Me.MinEventHandlerFörMittEvent
End Sub
Private Sub MinEventHandlerFörMittEvent(ByVal sender As Object, ByVal e As EventArgs)
MessageBox.Show("Anropad 2")
End Sub
End Class
</code>
<code>
Public Class Form3
Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
AddHandler MittEvent, AddressOf Me.MinEventHandlerFörMittEvent
Form2.Show()
OnMittEvent()
End Sub
Private Sub MinEventHandlerFörMittEvent(ByVal sender As Object, ByVal e As EventArgs)
MessageBox.Show("Anropad 3")
End Sub
End Class
</code>
<code>
Module Module1
Public Event MittEvent As EventHandler
Public Sub OnMittEvent()
RaiseEvent MittEvent(Nothing, EventArgs.Empty)
End Sub
End Module
</code>
När programmet startar avfyras alla MessageBox ... Som Sverker säger ... Ska det vara så? (jag vill inte de) Sv:Broadcasting internt i programmet
Sv: Broadcasting internt i programmet
Om jag nu kör många labels och textboxar i "MinEventHandlerFörMittEvent" så blir det något felmeddelande om att man inte kan köra i samma tråd ... Att fixa till det för en label känner jag till. Men hur gör man när man har många?
<code>
Private Sub MinEventHandlerFörMittEvent(ByVal sender As Object, ByVal e As EventArgs)
label1.text = "bla"
label2.text = "bla"
label3.text = "bla"
osv......
End Sub
</code>Sv:Broadcasting internt i programmet
Sv:Broadcasting internt i programmet