ERLEDIGT
JA
JA
ANTWORTEN
16
16
ZUGRIFFE
1251
1251
EMPFEHLEN
-
Hallo Leute,
vlt. hat jemand grad eine Idee:
Wir laden in einer Class normal ein Form mit Events.
Soweit alles i.O., nur kann dieser Aufruf mehrmals vorkommen, und zwar handelt es sich um eingehende Telefon-Gespräche, daher kann der Code
Code :1 2 3 4 5
'noch nicht offen: If ff Is Nothing Then Set fCall = New frmCall Call fCall.ShowCall End If
x beliebig mal ausgeführt werden. Das Problem ist nur, durch das New verlieren die vorhergegangen Fenster den Bezug, es werden daher keine Events mehr geschossen von den Fenstern.
Gibt es eine Möglichkeit, dass ich x Fenster neu initialisieren und aufmachen kann mit dem selben Objekt und trotzdem die älteren Fenster noch die entsprechenden Events schiessen können?
Vielen Dank im Voraus
Müller Matthias
-
25.01.12 13:02 #2
- Registriert seit
- Jul 2008
- Ort
- Hinter dem Mond gleich links
- Beiträge
- 735
Hi Doc,
kannst du mal den Deklarationsteil der Klasse posten?
bzw. den Teil wo du das Event definierst im Fenster-Modul?
Auch die Funktion, wo du das Event in der Klasse verarbeitest.Geändert von Zvoni (25.01.12 um 13:11 Uhr)
Zwei Dinge sind unendlich: Die menschliche Dummheit und das Universum, nur bei letzterem bin ich mir noch nicht sicher. - Albert Einstein
Code vb:1
If Beitrag.Hilfreich=True Then Bewertung.Send("Positiv")
-
25.01.12 14:04 #3
- Registriert seit
- Jul 2008
- Ort
- Hinter dem Mond gleich links
- Beiträge
- 735
Mal ein kleiner Testcode (Habe ich in Excel gemacht, daher das "UserForm")
1 x Standardmodul "Modul1"
1 x Klassenmodul "Klasse1"
1 x Fenstermodul "frmTest"
Standardmodul "Modul1"
Code vb:1 2 3 4 5 6 7 8 9
Public Klasse As Klasse1 Sub main() Set Klasse = New Klasse1 Klasse.main End Sub
Klassenmodul "Klasse1"
Code vb:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
Public WithEvents Fenster As frmTest Public Sub main() For i = 1 To 3 Set Fenster = New frmTest Fenster.Caption = "Form " & i Fenster.Show vbModeless Next End Sub Private Sub Fenster_Clicked(ByVal Nachricht As String) MsgBox "Fenster " & Nachricht & " wurde geclickt" End Sub
Fenstermodul "frmTest"
Code vb:1 2 3 4 5 6 7 8 9
Public Event Clicked(ByVal Nachricht As String) Private Sub UserForm_Click() Set Klasse.Fenster = Me RaiseEvent Clicked(Me.Caption) End Sub
Ich bekomme für alle drei Fenster das richtige Event geschossenZwei Dinge sind unendlich: Die menschliche Dummheit und das Universum, nur bei letzterem bin ich mir noch nicht sicher. - Albert Einstein
Code vb:1
If Beitrag.Hilfreich=True Then Bewertung.Send("Positiv")
-
clsTelephone
Class Deklaration
Code vb:1
Dim WithEvents fCall As frmCall
Entsprechender Aufruf
Code vb:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
Private Sub myCall_ShowCall(mCallkey As String) ', DescriptionComplete As String, ANR As String, CID As Long, StartDateTime As Date) On Error Resume Next Dim thisCall As clsPhonecall Dim thisCallIndex As Long For thisCallIndex = myCalls.Count To 1 Step -1 If mCallkey = myCalls(thisCallIndex).Key Then Set thisCall = myCalls(thisCallIndex) Exit For End If Next 'prüfen ob das Fenster schon offen ist Dim ff As Form Dim Y As Integer For Y = 0 To Forms.Count - 1 If LCase$(Forms(Y).Name) = "frmcall" Then If (Forms(Y).Handle = thisCall.Handle) And Len(thisCall.Handle) > False Then Set ff = Forms(Y) ff.Show Exit For ElseIf ((Forms(Y).Key) = thisCall.Key) And (Len(Forms(Y).Handle) = False) And (Len(thisCall.Handle) = False) Then Set ff = Forms(Y) ff.Show Exit For End If End If Next 'noch nicht offen: If ff Is Nothing Then Set fCall = New frmCall Call fCall.ShowCall(thisCall, myConsSettings, myRep, myImagelist, myIK) RaiseEvent RemoveIndicatedCall End If Set thisCall = Nothing End Sub
frmCall
Code vb:1
Public Event CreateNewAkt(aktsComment As String, aktlCommentFileName As String, PID As Long, AktType As Long, Technology As Long, myCall As clsPhonecall, mResp As String, mCloseAkt As Boolean)
Und halt entsprechend raiseevent beim frmCall und dann das Abfangen des Events auf clsTelephone, aber dahin kommt er eben nicht bei mehreren Fenstern.Geändert von Yaslaw (25.01.12 um 14:13 Uhr) Grund: Code-Tags durch VB-Tags ersetzt
-
@DrMueller
Bitte die VB-Codes in Zukunft selber in VB-Tags setzen. Es ist einfach viel lesbarer:
[VB]Dein Code[/VB]---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
25.01.12 14:15 #6
- Registriert seit
- Jul 2008
- Ort
- Hinter dem Mond gleich links
- Beiträge
- 735
Doc,
was ich während meinem Testcode erkennen konnte, ist wenn Zeile 5 in meinem Code Fenstermodul fehlt Set Klasse.Fenster = Me, dann wird nur das Event für das letzte (=jüngste) Fenster geschossen. Die älteren Fenster werden ignoriert.
Also genau der Fall, den du beschrieben hast.
Wenn ich es richtig verstehe, muss ein Fenster, bevor es sein Event abschiessen will, die "Aufmerksamkeit" der aufrufenden Klasse auf sich ziehen.
Hoffe du kannst was damit anfangen.Zwei Dinge sind unendlich: Die menschliche Dummheit und das Universum, nur bei letzterem bin ich mir noch nicht sicher. - Albert Einstein
Code vb:1
If Beitrag.Hilfreich=True Then Bewertung.Send("Positiv")
-
@Yaslaw habe ich doch gemacht?
@Zvoni ja genau jetzt sind wir gleich weit. Es werden immer nur die Events vom jüngsten Fenster geschossen. Meine Frage ist eben, ob VB6 überhaupt erlaubt, dass das gleiche Objekt mehrmals instanziert wird und die Class erkenen kann, welches denn nun schiesst.
-
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
oh sorry dann
-
25.01.12 15:39 #10
- Registriert seit
- Jul 2008
- Ort
- Hinter dem Mond gleich links
- Beiträge
- 735
aus
Code vb:1 2 3
Dim WithEvents fCall As frmCall 'wird Public WithEvents fCall As frmCall
...und im Fenstermodul
Code vb:1 2
Set clsTelephone.fCall=Me RaiseEvent CreateNewAkt(aktsComment As String, aktlCommentFileName As String, PID As Long, AktType As Long, Technology As Long, myCall As clsPhonecall, mResp As String, mCloseAkt As Boolean)
Nachdem ich in meinem Beispiel-Code das
eingefügt hatte, kamen alle Events in der Klasse an.Code vb:1 2 3
Set Klasse.Fenster = Me RaiseEvent Clicked(Me.Caption)
Zwei Dinge sind unendlich: Die menschliche Dummheit und das Universum, nur bei letzterem bin ich mir noch nicht sicher. - Albert Einstein
Code vb:1
If Beitrag.Hilfreich=True Then Bewertung.Send("Positiv")
-
25.01.12 15:43 #11
- Registriert seit
- Jul 2008
- Ort
- Hinter dem Mond gleich links
- Beiträge
- 735
Zwei Dinge sind unendlich: Die menschliche Dummheit und das Universum, nur bei letzterem bin ich mir noch nicht sicher. - Albert Einstein
Code vb:1
If Beitrag.Hilfreich=True Then Bewertung.Send("Positiv")
-
dann muss ich aber die class nochmal extra instanzieren, oder?
-
26.01.12 10:04 #13
- Registriert seit
- Jul 2008
- Ort
- Hinter dem Mond gleich links
- Beiträge
- 735
Nein, musst du nicht, da die Referenzierung von der Form-Seite her kommt.
Deine Klasse ruft ja die Form auf, und nicht umgekehrt.
Bedeutet für mich: Die Form ist "quasi" an die Klasse gebunden, nur eben dadurch dass es mehrere Formen, aber nur eine Klasse gibt, muss jede Form, bevor sie ihr Event schiesst, der Klasse zurufen: "Hey, ich schiesse gleich mein Event. Hör mir gefälligst zu"
Da du die Klasse ja nicht zerstörst, solange mindestens ein Fenster offen ist, sollte es da keine Probleme geben.Zwei Dinge sind unendlich: Die menschliche Dummheit und das Universum, nur bei letzterem bin ich mir noch nicht sicher. - Albert Einstein
Code vb:1
If Beitrag.Hilfreich=True Then Bewertung.Send("Positiv")
-
Sorry ich steh grad echt auf der Leitung.
Vom frmCall aus kann ich clsTelephone nicht ansprechen ohne es zu instanzieren. Wie kommt das denn?
-
26.01.12 12:26 #15
- Registriert seit
- Jul 2008
- Ort
- Hinter dem Mond gleich links
- Beiträge
- 735
Hä?
das clsTelephone war ja nur ein Beispiel von mir.
Da hast ja irgendwo im Code (wahrscheinlich in einem Standardmodul)
Code vb:1
Dim myClass as clsTelephone
in dem Fall musst du dann natürlich in frmCall vor dem RaiseEvent
eintragenCode vb:1 2
Set myClass.fCall=Me RaiseEvent CreateNewAkt blablabla
EDIT: Irgendwie habe ich das Gefühl, dass wir beide gerade aneinander vorbeireden.
Geändert von Zvoni (26.01.12 um 16:57 Uhr)
Zwei Dinge sind unendlich: Die menschliche Dummheit und das Universum, nur bei letzterem bin ich mir noch nicht sicher. - Albert Einstein
Code vb:1
If Beitrag.Hilfreich=True Then Bewertung.Send("Positiv")
Ähnliche Themen
-
Bild in Fenster neu laden ?
Von thomas01 im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 13Letzter Beitrag: 08.08.07, 21:46 -
Mehrere XMLFILES laden
Von Gerri84 im Forum Flash PlattformAntworten: 17Letzter Beitrag: 10.07.07, 16:58 -
Aus JavaScript Fenster unteres Fenster laden
Von proveo im Forum Javascript & AjaxAntworten: 1Letzter Beitrag: 20.01.05, 02:44 -
Fenster unendlich mal neu laden
Von PaZiHH im Forum Javascript & AjaxAntworten: 4Letzter Beitrag: 06.06.04, 14:08 -
Mehrere Texte Aus Txt Laden ?
Von xamunrax im Forum Flash PlattformAntworten: 3Letzter Beitrag: 17.10.01, 19:03





Zitieren


Login





