[VB6] UserControl laden

08/06/2010 - 10:26 von Heinz-Mario Frühbeis | Report spam
Hallo!

Wie kann ich denn bitte ein UC (UserControl) laden ohne das es sich in der
ToolBox der entsprechenden Form befindet?

Der Aufruf sollte aus einer DLL kommen, die mit "CreateObject" aufgerufen
wird.
Ich habe schon überlegt eine DLL anzulegen in der sich eine Form befindet.
Dann die DLL mit "CreateObject" laden und Controls.Add aufrufen; dann mit
SetParent das UC "verlagern".

Aber ist doch sicherlich nicht der Königsweg?

Viele Grüße
Heinz-Mario Frühbeis
 

Lesen sie die antworten

#1 G.Wietzorek
08/06/2010 - 11:34 | Warnen spam
Am 08.06.2010 10:26, schrieb Heinz-Mario Frühbeis:

Der Aufruf sollte aus einer DLL kommen, die mit "CreateObject"
aufgerufen wird.
Ich habe schon überlegt eine DLL anzulegen in der sich eine Form befindet.
Dann die DLL mit "CreateObject" laden und Controls.Add aufrufen; dann
mit SetParent das UC "verlagern".

Aber ist doch sicherlich nicht der Königsweg?




Controls.add ist der richtige Weg.

Deine DLL würde aber ohnehin einen Bezug auf die Form (und ggf. das
Steuerelement), in das eingefügt werden soll, benötigen - warum also so
kompliziert?

Im Anwendungscode selbst würde

oFrm.Controls.Add sProgid, sCtlName, oFrameCtl

schon reichen

Wenn Du diese Zeile in Deine DLL verlagerst, duplizierst Du das nur um
eine weitere Zwischenschicht, die Du dann ja auch aus Deinem
Hauptprogramm aufrufen musst

oClass.AddCtl sProgid, sCtlName, oTarget

Public Sub AddCtl(sProgid$, sCtlName$, _
Optional oTarget As Object)
Dim oFrm As VB.Form
Set oFrm = oTarget
oFrm.Controls.Add sProgid, sCtlName, oTarget
End Sub


Wenn Du so eine (nicht feststehende Zahl) von Controls einfügen willst
und auch deren Events abfangen willst, wird es komplizierter - egal ob
Direktaufruf oder DLL Funktion. Da gibt es mehrere Möglichkeiten, schau
Dir dann beispielsweise

http://www.mvps.org/vbvision/collection_events.htm

oder

http://www.mvps.org/emorcillo/en/co...ndex.shtml
(Event Collection Class)

an.

Gert

Ähnliche fragen