Sdílet prostřednictvím


Přehled Windows Forms a nespravovaných aplikací

Aplikace a ovládací prvky Windows Forms můžou spolupracovat s nespravovanými aplikacemi s některými upozorněními. Následující části popisují scénáře a konfigurace, které aplikace a ovládací prvky Modelu Windows Forms podporují, a ty, které nepodporují.

Ovládací prvky Windows Forms a aplikace ActiveX

S výjimkou microsoft Internet Exploreru a tříd MICROSOFT Foundation (MFC) nejsou ovládací prvky Windows Forms podporovány v aplikacích navržených k hostování ovládacích prvků ActiveX. Ostatní aplikace a vývojové nástroje, které jsou schopné hostovat ovládací prvky ActiveX, včetně testovacích kontejnerů ActiveX z verzí sady Visual Studio starších než Visual Studio .NET 2003, nejsou podporovány hostiteli ovládacích prvků Windows Forms.

Tato omezení platí také pro použití ovládacích prvků Windows Forms prostřednictvím komponentového objektového modelu (COM). Použití ovládacího prvku Windows Forms pomocí obalu COM pro volání (CCW) je podporováno pouze v Internet Exploreru. Další informace o interoperabilitě modelu COM najdete v tématu

Interoperabilita modelu COM

Následující tabulka ukazuje dostupnou podporu hostování ActiveX pro ovládací prvky Windows Forms.

Verze Windows Forms Podpora
.NET Framework verze 1.0 Internet Explorer 5.01 a novější verze
.NET Framework verze 1.1 a novější Internet Explorer 5.01 a novější verze

Microsoft Foundation Classes (MFC) 7.0 a novější

Hostování komponent Windows Forms jako ovládacích prvků ActiveX

V rozhraní .NET Framework 1.1 byla podpora rozšířena tak, aby zahrnovala mfc 7.0 a novější verze. Tato podpora zahrnuje všechny kontejnery, které jsou plně kompatibilní s kontejnerem ovládacího prvku ActiveX MFC 7.0 a novějším.

Registrace ovládacích prvků Windows Forms jako ovládacích prvků ActiveX se ale nepodporuje. Také volání metody com.ms.win32.Ole32.CoCreateInstance pro ovládací prvky Windows Forms není podporováno. Podporuje se pouze spravovaná aktivace ovládacích prvků Windows Forms. Jakmile vytvoříte ovládací prvek Windows Forms, můžete ho hostovat v aplikaci MFC stejně jako ovládací prvek ActiveX.

Pokud chcete ve své nespravované aplikaci používat ovládací prvky Windows Forms, musíte buď hostovat CLR pomocí nespravovaných rozhraní API pro hostování modulu CLR, nebo používat funkce interoperability C++. Doporučeným řešením je použití funkcí zprostředkovatele komunikace C++.

Windows Forms v COM klientských aplikacích

Když otevřete formulář Windows Form z klientské aplikace modelu COM, například aplikace Visual Basic 6.0 nebo aplikace MFC, může se formulář chovat neočekávaně. Když například stisknete klávesu TAB, fokus se nezmění z jednoho ovládacího prvku na jiný ovládací prvek. Když stisknete klávesu ENTER, když je fokus na příkazovém tlačítku, událost tlačítka Click se nevyvolá. Může také dojít k neočekávanému chování při stisknutí kláves nebo aktivitě myši.

K tomuto chování dochází, protože nespravovaná aplikace neimplementuje podporu smyčky zpráv, kterou Windows Forms vyžaduje, aby správně fungovala. Smyčka zpráv poskytovaná klientskou aplikací modelu COM se zásadně liší od smyčky zpráv modelu Windows Forms.

Smyčka zpráv aplikace je interní smyčka programu, která načítá zprávy z fronty zpráv vlákna, překládá je a pak je odesílá do aplikace, která se má zpracovat. Smyčka zpráv pro Windows Forms nemá stejnou architekturu jako smyčky zpráv, které poskytují dřívější aplikace, jako jsou aplikace Visual Basic 6.0 a aplikace MFC. Zprávy okna, které jsou publikovány do smyčky zprávy, mohou být zpracovávány jinak než Windows Form očekává. Proto může dojít k neočekávanému chování. Některé kombinace stisknutí kláves nemusí fungovat, některé aktivity myši nemusí fungovat nebo některé události nemusí být vyvolány podle očekávání.

Řešení problémů s interoperabilitou

Tyto problémy můžete vyřešit zobrazením formuláře ve smyčce zpráv rozhraní .NET Framework, který je vytvořen pomocí Application.Run metody.

Pokud chcete, aby Formulář Windows fungoval správně z COM klientské aplikace, musíte ho spustit ve smyčce zpráv Windows Forms. K tomu použijte jeden z následujících přístupů:

Viz také