In VB6 kann ein UserControl zu einem OCX kompiliert und dann in einem anderen Projekt als eine referenzierte Komponente enthalten. Alternativ kann die UserControl-Quelle selbst (d. H. CTL-Datei) direkt in einem EXE- oder DLL-Projekt enthalten sein.VB6 UserControls: Unterschiede zwischen OCX vs. einschließlich in Projekt
Es gibt einen merkwürdigen Unterschied zwischen den beiden Ansätzen. Bei Verwendung aus einem OCX wird die Liste der Extender properties (more) nahtlos mit benutzerdefinierten Eigenschaften für das Steuerelement zusammengeführt. Bei Verwendung von CTL scheint dies jedoch nicht der Fall zu sein. Wenn Sie versuchen, die Extender-Eigenschaften für das Steuerelement zu verwenden, werden Compilerfehler generiert.
Ein Beispiel wäre die .Tag
Eigenschaft. Wenn Sie als OCX referenzieren, ist diese Eigenschaft in Intellisense verfügbar und kompiliert OK. Wenn Sie jedoch die CTL verwenden, generiert die genaue Verwendung dieser Eigenschaft einen Kompilierungsfehler.
Andere Beispiele wären .Left
, usw. Ich erwartete, dass VB6 die Extender-Eigenschaften unabhängig davon, wie das Steuerelement enthalten war, gleich behandelt.
Warum besteht dieser Unterschied, und gibt es eine Lösung?
(Als Problemumgehung habe ich auf die Steuerelemente im Code als Typ Object
verwiesen, wenn Extender-Eigenschaften zugegriffen werden müssen. Aber idealerweise würde ich lieber den tatsächlichen Typ für Klarheit und Kompilierungssicherheit verwenden.)
Ein OCX ist eine DLL-Datei mit einem lustigen Namen. Sie verwenden COM, um darauf zuzugreifen. VB6 hat seine eigene interne COM für interne Sachen, die ein bisschen schneller ist. Vielleicht ist das der Unterschied. –
@Noodles wenn ja, scheint es ein anomaler Unterschied zu sein. Jeder andere Fall, in dem ich weiß, wie Code in die EXE gebündelt wird, gegen das Kompilieren in eine separate DLL/OCX macht keinen Unterschied. – DaveInCaz
Es ist ein Unterschied im Framework, auf das sie zugreifen. Es ist nur eine Hypothese. Aber es ist ein Unterschied zwischen CTL und DLL –