2010-08-02 4 views
0

J'ai besoin d'utiliser activeX pour créer un plugin pour une application héritée. J'utilise C# afin que je puisse partager la base de code de plusieurs produits autonomes connexes.Le contrôle ActiveX devient vide dans un conteneur hôte mais pas les autres

Lorsque j'héberge le contrôle dans le conteneur de test du SDK (TstCon32.exe) tout fonctionne correctement. Le problème est que lorsque j'essaie de le charger dans l'application cible la première fois que je clique sur le contrôle tout sauf l'élément sur lequel j'ai cliqué (cellule textbox ou dataagrid) est peint avec le contrôle gris, si je change la couleur de fond du contrôle à quelque chose d'autre l'arrière-plan reste la même couleur que j'ai spécifié, mais tous les contrôles sont encore couverts avec le contrôle gris (de l'application du conteneur?). Si vous cliquez sur des contrôles supplémentaires, ils seront peints. Si vous redimensionnez le contrôle, tout sera repeint. Après la suppression initiale, le contrôle fonctionne normalement jusqu'à la prochaine création d'une copie.

Répondre

1

J'ai finalement trouvé une solution. La première partie était de changer mon cadre ciblé de 4.0 à une version antérieure. Cette étude a révélé une CGU d'exception se produisait lorsque le contrôle a été obturé qui était auparavant consommé et caché de moi:

System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt. 
    at System.Windows.Forms.UnsafeNativeMethods.IOleInPlaceSite.OnUIActivate() 
    at System.Windows.Forms.Control.ActiveXImpl.InPlaceActivate(Int32 verb) 
    at System.Windows.Forms.Control.ActiveXImpl.OnFocus(Boolean focus) 
    at System.Windows.Forms.Control.ChildGotFocus(Control child) 
    at System.Windows.Forms.Control.OnGotFocus(EventArgs e) 
    at System.Windows.Forms.Control.WmSetFocus(Message& m) 
    at System.Windows.Forms.Control.WndProc(Message& m) 
    at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) 
    at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) 
    at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) 

De là, j'ai pu trouver un post par tomasvdb qui a rencontré le même problème que moi avec Google Barre latérale

L'une des réponses à ce message lié à ce message qui fournissait une solution de contournement pour un bogue dans lequel l'application de barre latérale envoyait des données non valides au contrôle .net.

L'appel de cette méthode de contournement dans le gestionnaire d'événements VisibleChanged du Contrôleur a également résolu mon problème.

Questions connexes