tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
JA
ANTWORTEN
16
ZUGRIFFE
1251
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    DrMueller DrMueller ist offline Mitglied Brokat
    Registriert seit
    Aug 2006
    Beiträge
    396
    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
     

  2. #2
    Zvoni Zvoni ist offline Mitglied Platin
    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")

  3. #3
    Zvoni Zvoni ist offline Mitglied Platin
    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 geschossen
     
    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")

  4. #4
    DrMueller DrMueller ist offline Mitglied Brokat
    Registriert seit
    Aug 2006
    Beiträge
    396
    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
     

  5. #5
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    @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

  6. #6
    Zvoni Zvoni ist offline Mitglied Platin
    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")

  7. #7
    DrMueller DrMueller ist offline Mitglied Brokat
    Registriert seit
    Aug 2006
    Beiträge
    396
    @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.
     

  8. #8
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Zitat Zitat von DrMueller Beitrag anzeigen
    @Yaslaw habe ich doch gemacht?
    Nix für ungut, aber das hab ich für dich gemacht - Es war alles in einfachen Code-Tags.
     
    ---------------------------------------------------------------------------------------------------
    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

  9. #9
    DrMueller DrMueller ist offline Mitglied Brokat
    Registriert seit
    Aug 2006
    Beiträge
    396
    oh sorry dann
     

  10. #10
    Zvoni Zvoni ist offline Mitglied Platin
    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
    Code vb:
    1
    2
    3
    
    Set Klasse.Fenster = Me
     
    RaiseEvent Clicked(Me.Caption)
    eingefügt hatte, kamen alle Events in der Klasse an.
     
    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")

  11. #11
    Zvoni Zvoni ist offline Mitglied Platin
    Registriert seit
    Jul 2008
    Ort
    Hinter dem Mond gleich links
    Beiträge
    735
    Zitat Zitat von DrMueller Beitrag anzeigen
    *schnipp*
    Meine Frage ist eben, ob VB6 überhaupt erlaubt, dass das gleiche Objekt mehrmals instanziert wird und die Class erkenen kann, welches denn nun schiesst.
    Ja, VB erlaubt das, aber du musst manuell auf das "schiessende" Fenster umbiegen. Siehe mein Beispiel oben
     
    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")

  12. #12
    DrMueller DrMueller ist offline Mitglied Brokat
    Registriert seit
    Aug 2006
    Beiträge
    396
    dann muss ich aber die class nochmal extra instanzieren, oder?
     

  13. #13
    Zvoni Zvoni ist offline Mitglied Platin
    Registriert seit
    Jul 2008
    Ort
    Hinter dem Mond gleich links
    Beiträge
    735
    Zitat Zitat von DrMueller Beitrag anzeigen
    dann muss ich aber die class nochmal extra instanzieren, oder?
    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")

  14. #14
    DrMueller DrMueller ist offline Mitglied Brokat
    Registriert seit
    Aug 2006
    Beiträge
    396
    Sorry ich steh grad echt auf der Leitung.
    Vom frmCall aus kann ich clsTelephone nicht ansprechen ohne es zu instanzieren. Wie kommt das denn?
     

  15. #15
    Zvoni Zvoni ist offline Mitglied Platin
    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
    Code vb:
    1
    2
    
    Set myClass.fCall=Me
    RaiseEvent CreateNewAkt blablabla
    eintragen

    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

  1. Bild in Fenster neu laden ?
    Von thomas01 im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 13
    Letzter Beitrag: 08.08.07, 21:46
  2. Mehrere XMLFILES laden
    Von Gerri84 im Forum Flash Plattform
    Antworten: 17
    Letzter Beitrag: 10.07.07, 16:58
  3. Aus JavaScript Fenster unteres Fenster laden
    Von proveo im Forum Javascript & Ajax
    Antworten: 1
    Letzter Beitrag: 20.01.05, 02:44
  4. Fenster unendlich mal neu laden
    Von PaZiHH im Forum Javascript & Ajax
    Antworten: 4
    Letzter Beitrag: 06.06.04, 14:08
  5. Mehrere Texte Aus Txt Laden ?
    Von xamunrax im Forum Flash Plattform
    Antworten: 3
    Letzter Beitrag: 17.10.01, 19:03