Objekt an Sub übergeben

Hallo Leute,

ich versuche mich gerade in objekt-orientiertet Programmierung und bin soweit auch schon recht erfolgreich mit meinen Versuchen. Ich habe mir eine Klasse geschrieben und eine weitere Klasse, welche mir als Collection dient. Ich möchte nun meiner Collection nicht nur über die „normale“ Add-Methode Daten hinzufügen, sondern ich möchte über eine AddObjekt gleich ein ganzes Objekt übergeben.
Dazu habe ich in der Collection folgendes definiert:

Public Sub AddObject(ByVal objObjekt As MeineKlasse)
mCol.Add objObjekt
End Sub

Aber sobald ich dann im Programm meinen Aufruf starte:
myCollection.AddObject(Objekt) sagt er mir immer: Objekt unterstützt diese Eigenschaft oder Methode nicht. (Obwohl ‚Objekt‘ vom Typ ‚MeineKlasse‘ ist)

Daher meine Frage: Wie kann ich Objekte an Funktionen übergeben?

turboPasqual

Daher meine Frage: Wie kann ich Objekte an Funktionen
übergeben?

Hallo
Du erstellst eine Variable , Datenformat „Object“ , das ist alles .
Die Variable muß Public sein , oder Du kannst das Object auch über einen beliebigen Bezeichner nennen .
Beispiel :

Public iobject as Object 'nur für eine allgemein benutztes Object

Private Sub idoit(theobject as Object) ’ private function für Funktion
ishowit:
theobject.visible = true

End Sub ’ End function für Funktion

Soll diese Routine dann ein übergebenes Object sichtbar machen , kann sie einfach aufgerufen werden :
Call idoit(DeinObject)
MfG

Hallo nochmal,

also teilweise funktioniert es nun (selbst ohne Public), aber noch nicht so richtig.

Also ich mache nun folgendes:

Public Sub AddObject(ByVal objObjekt As MeineKlasse)
'Code
End Sub

dim Objekt as MeineKlasse

Wenn ich nun folgendes Aufrufe, gibt er mir grundsätzlich keinen Fehler aus:
myCollection.AddObject(Objekt)

Wenn ich aber zwischendurch folgendes mache:
Set Objekt = New MeineKlasse

und danach dann aufrufe:
myCollection.AddObject(Objekt)

Kriege ich die Fehlermeldung: Typen unverträglich. Was mache ich denn noch falsch?

mfG
Pasqual

Hallo nochmal,

also teilweise funktioniert es nun (selbst ohne Public), aber

Hallo
Public wird nur für Variablen gebraucht , welche über mehrere Module hin verwendet werden …

noch nicht so richtig.

Also ich mache nun folgendes:

Public Sub AddObject(ByVal objObjekt As MeineKlasse)
'Code
End Sub

Warum „ByVal“ ?? warum nicht „Public Sub AddObject(objObjekt As Object)“ ? Schreibst Du etwa dll Aufrufe ?
Ich kenn Deine Klassen nicht . Ich erinnere mich nur an das hinzufügen von Unterfenstern , wobei eine „Klasse registriert“ werden mußte .

dim Objekt as MeineKlasse

Wenn ich nun folgendes Aufrufe, gibt er mir grundsätzlich
keinen Fehler aus:
myCollection.AddObject(Objekt)

Wenn ich aber zwischendurch folgendes mache:
Set Objekt = New MeineKlasse

Mit Set Variable = xyz kannst Du nur die Variable auf den Wert xyz setzen . Das gilt auch für Objekte .
Möchtest Du ein Objekt übergeben , indem Du eine Variable die auf den Typen „Object“ gesetzt wurde , mit Set = DeinObject beschreibst , kannst Du anschließend „DeinObject“ verwenden
Du must Dich genau an die Hilfe halten und eventuell ein paar mal probieren .
Möchtest Du ein neues Objekt , das kann man auch recht einfach .
Ich meine jetzt , das wäre dann :
Set Objektvariable xyz as New vorhandenesObject
Sorry , so in etwa

und danach dann aufrufe:
myCollection.AddObject(Objekt)

Kriege ich die Fehlermeldung: Typen unverträglich. Was mache
ich denn noch falsch?

Ich kann nur auf die Hilfedatei verweisen .
Das VB konnte warscheinlich nicht die Variablentypen umrechnen , zu verschiedenartig .
Ich fürchte , eine Klasse ist was anderes als wie ein Object , frag doch auch mal andere . Ich habe VB 5 .
Ich schreibe gerade selber was , und da ist noch irgendein blöder Fehler drin , ich weiß nur noch nicht wo .

MfG

Hallo,

Hallo nochmal,

also teilweise funktioniert es nun (selbst ohne Public), aber

Hallo
Public wird nur für Variablen gebraucht , welche über mehrere
Module hin verwendet werden …

Ja, das war mir bewusst.

noch nicht so richtig.

Also ich mache nun folgendes:

Public Sub AddObject(ByVal objObjekt As MeineKlasse)
'Code
End Sub

Warum „ByVal“ ?? warum nicht „Public Sub AddObject(objObjekt
As Object)“ ? Schreibst Du etwa dll Aufrufe ?

Nein, ich schreibe keine DLL-Aufrufe. ByVal finde ich einfach sauberer, als ByRef (welches von VB sonst standardmäßig benutzt wird). Das ist aber irgendwo Geschmackssache.

Set Objekt = New MeineKlasse
myCollection.AddObject(Objekt)

Habe den Fehler gefunden. Richtig ist an dieser Stelle:
myCollection.AddObject Objekt
oder: call myCollection.AddObject(Objekt)

Also: Es lag mal wieder nur an der falschen Klammersetzung, aber trotzdem danke für die Mühen (Hat mich jetzt selbst bestimmt 4 Stunden Arbeit gekostet, grrr)

Pasqual