MS-Office-Forum
Google
   

Zurück   MS-Office-Forum > Microsoft Access & Datenbanken > Microsoft Access
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads Der Renner, 11 Entwicklertools für Access, Tipps & Trick und offene Datenbanken zum einzigartigen Preis.
Themen-Optionen Ansicht
Alt 18.09.2017, 13:34   #1
chbahn
MOF User
MOF User
Standard Acc2016 - WithEvents Form und CommandButton

Hallo,
ich komme einfach nicht weiter und finde leider keine passenden Informationen! (Bin anscheinend zu blöd zum Suchen, aber egal).
Was möchte ich erreichen! Ich versuche eine Klasse zu schreiben, die im ersten Schritt ein Formular öffnet und auf bestimmte Events von dem Formular reagiert.
In meinem Versuch hat das Formular nur zwei Schaltflächen (Reicht zum Testen und verstehen). Wird auf eine der Schaltfläche geklickt so soll das Event in der Klasse abgefangen werden. Dazu habe ich die Variable objBtnCancel und objBtnSave mit WithEvents sowie objForm für das Formular definiert!
Beim Initialisieren der Klasse weise ich dem objForm das entsprechende Formular zu. Den beiden Variablen obhBtnSave nd objBtnCancel werden die entsprechenden Schaltflächen über das Objekt objForm zugewiesen.
Dann habe ich die beiden Event Funktionen erstellt. Objbtncancel_Click() sowie objBtnSave_Click(). Leider funktionieren beide nicht! Ich finde dazu leider keine Lösung. Ich denke das ich hier ein Denkfehler mache!
Mein zweites Problem ist die Funktion IsFormActive in der Klasse. Dort möchte ich feststellen ob das Formular noch sichtbar ist! Klappt leider nicht! Wie kann ich das prüfen?
Für jede Hilfe bin ich dankbar!
Die Klasse
Code:

Option Compare Database

Dim WithEvents objForm As Form
Dim WithEvents objBtnCancel As CommandButton
Dim WithEvents objBtnSave As CommandButton

Private Sub Class_Initialize()
    Set objForm = New Form_TestFormular
    Set objBtnSave = objForm.btnSave
    Set objBtnCancel = objForm.btnCancel
End Sub

Public Sub ShowForm()
    objForm.Visible = True
    Debug.Print objBtnSave.Name
    Debug.Print objBtnCancel.Name
End Sub

Public Function IsFormActive() As Boolean
    If Not objForm Is Nothing Then
        IsFormActive = objForm.Visible
    Else
        IsFormActive = False
    End If
End Function

Private Sub objBtnCancel_Click()
    Debug.Print "Button:Abbrechen!"
    objForm.Visible = False
End Sub

Private Sub objBtnSave_Click()
    Debug.Print "Button:Speichern!"
    objForm.Visible = False
End Sub

Private Sub objForm_Close()
    Debug.Print "Form_Close!"
End Sub

Private Sub objForm_Unload(Cancel As Integer)
    Debug.Print "Form_Unload!"
End Sub
Das Modul zum Aufrufen der Klasse
Code:

Public Sub OpenForm()
    Dim objtree As New clsForms
    With objtree
        .ShowForm
        While .IsFormActive = True
            DoEvents
        Wend
    End With
End Sub
Das Formular
Name des Formulars: Form_TestFormular
Inhalt: Zwei Schaltflächen btnSave und btnCancel

__________________

"Programmers never die, they just GOSUB without RETURN"
chbahn ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 18.09.2017, 13:43   #2
chbahn
Threadstarter Threadstarter
MOF User
MOF User
Standard

Einen Teil meines Problems hat sich gerade in Luft aufgelöst.
Das Problem warum die Eventfunktionen in der Klasse nicht funktioniert haben ist der, das in dem Formular die Funktionen ebenen falls vorhanden sein müssen.
Jetzt habe ich noch das Problem, wie Prüfe ich ob das Formular noch geladen ist. Wird das Formular über objForm.Visible = false „geschlossen“ funktioniert alles wunderbar. Wird es aber über die Schließen Schaltfläche geschlossen bekomme ich die Meldung: „In dem von Ihnen eingegebenen Ausdruck wird auf ein Objekt verwiesen, das geschlossen oder nicht vorhanden ist.“
Ich dachte das ich mit der Prüfung If Not objFrom Is Nothing würde ich das Überprüfen. Anscheinend doch nicht. Aber wie mache ich das?

__________________

"Programmers never die, they just GOSUB without RETURN"
chbahn ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 18.09.2017, 13:49   #3
JPA
MOF Koryphäe
MOF Koryphäe
Standard

Brauchst ein BenutzerdefiniertesEvent, welches sich auslöst wenn form oder klasse geschlossen wird :

Code:

Public Event Terminate()

Private Sub Form_Close()
    RaiseEvent Terminate
End Sub

und in der Aufrufenden Klasse:
Code:

Private Sub MeinKlassenobjekt_Terminate()
    Set MeinKlassenobjekt= Nothing
End Sub
VG
JPA
JPA ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 18.09.2017, 15:35   #4
sonic8
MOF Profi
MOF Profi
Standard

Zitat: von chbahn Beitrag anzeigen

Das Problem warum die Eventfunktionen in der Klasse nicht funktioniert haben ist der, das in dem Formular die Funktionen ebenen falls vorhanden sein müssen.

Nein, müssen sie nicht. Du musst nur in die OnClick-Property den Text "[Event Procedure]" eintragen. - Dass passiert automatisch wenn du über das PropertySheet des Forms die Eventhandler definierst.
sonic8 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 19.09.2017, 14:12   #5
chbahn
Threadstarter Threadstarter
MOF User
MOF User
Standard

Zitat: von sonic8 Beitrag anzeigen

Nein, müssen sie nicht. Du musst nur in die OnClick-Property den Text "[Event Procedure]" eintragen. - Dass passiert automatisch wenn du über das PropertySheet des Forms die Eventhandler definierst.

Hallo sonic8, das habe ich ausprobiert! Hat bei mir leider nicht funktioniert. Es klappt leider erst, wenn ich eine Prozedur im Form hinterlege!

__________________

"Programmers never die, they just GOSUB without RETURN"
chbahn ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 19.09.2017, 14:15   #6
chbahn
Threadstarter Threadstarter
MOF User
MOF User
Standard

Zitat: von JPA Beitrag anzeigen

Brauchst ein BenutzerdefiniertesEvent, welches sich auslöst wenn form oder klasse geschlossen wird :

Code:

Public Event Terminate()

Private Sub Form_Close()
    RaiseEvent Terminate
End Sub

und in der Aufrufenden Klasse:
Code:

Private Sub MeinKlassenobjekt_Terminate()
    Set MeinKlassenobjekt= Nothing
End Sub
VG
JPA

Vielen Dank für die Information! Das zusätzliche Event war nicht nötig. Da ich in meiner Klasse das Form schon als Object mit WithEvents reagiere ich dort auf das Event Close! Musste aber in dem Form eine Sub Form_Close anlegen ohne Code! Warum auch immer?

__________________

"Programmers never die, they just GOSUB without RETURN"
chbahn ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:52 Uhr.


Partner und Co.
Access-Paradies -Alles rund um die Datenbank Microsoft Access -Code -Programme-Tools -Tipps   Kostenlose Tipps & Tricks, Downloads und Programme   www.kulpa-online.com - Tipps - Tricks - Tutorials - Meinungen - Downloads uvm...   vb@rchiv · Willkommen in der Welt der VB Programmierung   Access-Garhammer - Hier finden Sie jede Menge Beispiel-Datenbanken zu Access und mehr ...   mcseboard.de   Die Top Seite für Excel-VBA-Makros uvm.

Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

Copyright ©2000-2010 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günther Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.
Beachten Sie bitte auch unsere Nutzungsbedingungen.