2016-07-28 37 views
3

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.)

+0

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. –

+0

@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

+0

Es ist ein Unterschied im Framework, auf das sie zugreifen. Es ist nur eine Hypothese. Aber es ist ein Unterschied zwischen CTL und DLL –

Antwort

0

Es hat keine wirklichen Unterschiede im Programm überhaupt. Es ist in das Programm kompiliert, so ist es mit den Verfahren der Kontrolle im Unterschied verknüpft, vielleicht haben Sie einige falsche Code, die nicht bemerkt werden oder ist nicht durch den Compiler mit einer externen Kontrolle illegal. Aber es spart Speicher, wenn Sie einige Programme mit dem Steuerelement ausführen, weil der für das Steuerelement geschriebene Code nur einmal geladen wird. Und Sie können das Steuerelement auch einzeln ändern, und Sie müssen es nur einmal kompilieren (wenn Sie das Programm für andere Personen erstellen, müssen sie nur das geänderte ausführbare Programm aktualisieren).

0

Wenn Sie den Quellcode für das Steuerelement in Ihrem Projekt haben, dann sehen Sie es beim Interagieren mit dem Steuerelement (indem Sie seinen Code ausführen), Zeile für Zeile, wenn Sie im Debuggen sind.

Dies kann wirklich verlangsamen, wenn Sie Schritt Debug-Code, der nicht in der Kontrolle ist. Sobald das Steuerelement funktioniert und stabil ist, ist es an der Zeit, es zu kompilieren und die OCX-Referenz zu verwenden, bis Änderungen am Steuerelement erforderlich sind.