Delen via


Overzicht van Windows Forms en niet-beheerde toepassingen

Windows Forms-toepassingen en -besturingselementen kunnen samenwerken met onbeheerde toepassingen, met enkele opmerkingen. In de volgende secties worden de scenario's en configuraties beschreven die windows Forms-toepassingen en besturingselementen ondersteunen en die niet worden ondersteund.

Besturingselementen voor Windows-formulieren en ActiveX-toepassingen

Met uitzondering van Microsoft Internet Explorer en Microsoft Foundation Classes (MFC) worden Windows Forms-besturingselementen niet ondersteund in toepassingen die zijn ontworpen voor het hosten van ActiveX-besturingselementen. Andere toepassingen en ontwikkelhulpprogramma's die activeX-besturingselementen kunnen hosten, waaronder de ActiveX-testcontainers van versies van Visual Studio die ouder zijn dan Visual Studio .NET 2003, worden niet ondersteund voor hosts voor Windows Forms-besturingselementen.

Deze beperkingen zijn ook van toepassing op het gebruik van Windows Forms-besturingselementen via Component Object Model (COM) interop. Het gebruik van een Windows Forms-besturingselement via een COM-aanroepbare wrapper (CCW) wordt alleen ondersteund in Internet Explorer. Zie voor meer informatie over COM-interop

COM Interop.

In de volgende tabel ziet u de beschikbare ActiveX-hostingondersteuning voor Besturingselementen voor Windows Forms.

Windows Forms-versie Ondersteuning
.NET Framework versie 1.0 Internet Explorer 5.01 en nieuwere versies
.NET Framework versie 1.1 en hoger Internet Explorer 5.01 en nieuwere versies

Microsoft Foundation Classes (MFC) 7.0 en hoger

Onderdelen van Windows Forms hosten als ActiveX-besturingselementen

In .NET Framework 1.1 is de ondersteuning uitgebreid met MFC 7.0 en latere versies. Deze ondersteuning omvat alle containers die volledig compatibel zijn met de ActiveX-besturingscontainer MFC 7.0 en hoger.

Echter, registratie van Windows Forms-besturingselementen als ActiveX-besturingselementen wordt niet ondersteund. Het aanroepen van de com.ms.win32.Ole32.CoCreateInstance methode voor Besturingselementen voor Windows Forms wordt ook niet ondersteund. Alleen beheerde activering van Besturingselementen voor Windows Forms wordt ondersteund. Zodra u een Besturingselement voor Windows Forms hebt gemaakt, kunt u dit hosten in een MFC-toepassing, net als bij een ActiveX-besturingselement.

Als u Windows Forms-besturingselementen in uw onbeheerde toepassing wilt gebruiken, moet u de CLR hosten met behulp van de niet-beheerde CLR-hosting-API's of de C++-interopfuncties gebruiken. Het gebruik van de C++-interopfuncties is de aanbevolen oplossing.

Windows Forms in COM-clienttoepassingen

Wanneer u een Windows-formulier opent vanuit een COM-clienttoepassing, zoals een Visual Basic 6.0-toepassing of een MFC-toepassing, kan het formulier onverwacht werken. Wanneer u bijvoorbeeld op de Tab-toets drukt, verandert de focus niet van het ene besturingselement naar het andere besturingselement. Wanneer u op Enter drukt terwijl een opdrachtknop de focus heeft, wordt de Click-gebeurtenis van de knop niet gegenereerd. U kunt ook onverwacht gedrag ervaren voor toetsaanslagen of muisactiviteit.

Dit gedrag treedt op omdat de niet-beheerde toepassing de ondersteuning van de berichtenlus niet implementeert die Windows Forms nodig heeft om correct te werken. De berichtlus van de COM-clienttoepassing verschilt fundamenteel van de Windows Forms-berichtenlus.

De berichtenlus van een toepassing is een interne programmalus waarmee berichten uit de berichtenwachtrij van een thread worden opgehaald, vertaald en vervolgens naar de toepassing worden verzonden die moeten worden verwerkt. De berichtenlus voor een Windows-formulier heeft niet dezelfde architectuur als berichtlussen die eerdere toepassingen, zoals Visual Basic 6.0-toepassingen en MFC-toepassingen, bieden. De vensterberichten die in de berichtenlus worden geplaatst, kunnen anders worden verwerkt dan verwacht in het Windows-formulier. Daarom kan onverwacht gedrag optreden. Sommige toetsenaanslagen werken mogelijk niet, sommige muisactiviteit werkt mogelijk niet of sommige gebeurtenissen worden mogelijk niet gegenereerd zoals verwacht.

Interoperabiliteitsproblemen oplossen

U kunt deze problemen oplossen door het formulier weer te geven in een .NET Framework-berichtlus, die wordt gemaakt met behulp van de Application.Run methode.

Als u een Windows-formulier correct wilt laten werken vanuit een COM-clienttoepassing, moet u dit uitvoeren in een Windows Forms-berichtlus. Gebruik hiervoor een van de volgende methoden:

Zie ook