Créer un controle dynamique

Signaler
Messages postés
13
Date d'inscription
mardi 28 juin 2005
Statut
Membre
Dernière intervention
23 novembre 2006
-
Messages postés
13
Date d'inscription
mardi 28 juin 2005
Statut
Membre
Dernière intervention
23 novembre 2006
-
bonjour à tous,

comment placer un control dynamique dans une "TABPAGE crée dynamiquement".

J'utilise le controle Adobe Browser ( AcroPDF.dll)
Je procède comme ceci :

AxAcroPDFLib.AxAcroPDF rdpdf = new AxAcroPDFLib.AxAcroPDF();
rdpdf.src = strPDF;

Voilà l'erreur qui est générée :

Une exception de type 'System.Windows.Forms.AxHost+InvalidActiveXStateException' a été levée.

Merci de votre aide.

4 réponses

Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
41
Salut, as tu essayé d'initialiser la propriété src uniquement apres que le controle ActiveX soit visible.
Messages postés
13
Date d'inscription
mardi 28 juin 2005
Statut
Membre
Dernière intervention
23 novembre 2006

Nan le problème c'est que je ne sais pas le faire. J'ai essayé de reprendre des lignes du designer mais sans réussite.

Si quelqu'un a un lien ou des explications à me proproser je suis preneur ! merci
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
41
Tu as bien les 2 wrappers dans ton projet, AcroPDFLib.dll et AxAcroPDFLib.dll ? Tu peux les générer avec VS2005 en rajoutant le composant dans ta boite à outil puis en le glissant sur ta forme ou les générer en ligne de commande avec aximp.exe et tlbimp.exe.

L'exception que tu as vient du fait que tu indiques la source avant même que le contrôle soit visible, la classe AxAcroPDF dérive de AxHost qui dérive de Control, c'est donc un contrôle et il faut le rajouter sur la forme pour qu'il soit visible.

AxAcroPDF ax = new AxAcroPDF( );
this.Controls.Add( ax ); // Ajout dynamique sur la forme.
ax.src = "D:\\test.pdf";
Messages postés
13
Date d'inscription
mardi 28 juin 2005
Statut
Membre
Dernière intervention
23 novembre 2006

Oui j'ai fais ça mais marche à moitié avec mon code .

En faiite j'ai un menustrip qui me permet de choisir des fichiers PDF. J'ai un tabcontrol sans onglet.
Lorsque que je click sur un item du menu, ça crée un onglet et charge le controle  Acrobat Reader dans le tabpage.
Le problème est que au bout de 2 clicks j'ai cette erreur :

Une exception de type 'System.Windows.Forms.AxHost+InvalidActiveXStateException' a été levée.

Ca marche seulement si je mets 0 à la place de nbTAB ( int nbTAB = tabControl1.TabCount; )

this.tabControl1.TabPages[nbTAB].Controls.Add(this.axPDF);

Mais apres les titres de mes onglets ne correpondent pas au document PDF affiché (décalage).

voici le code :

            Boolean exTAB = false;
            int nbTAB = tabControl1.TabCount;
            if (nbTAB >= 1)
            {
                for (int i = 0; i < nbTAB; i++)
                {
                    if (tabControl1.TabPages[i].Text == srcREF) 
                    {
                        exTAB = true;
                        continue;
                    }
                }
                if (exTAB == false)
                {
                    tabControl1.TabPages.Add(srcREF);
                    this.tabControl1.TabPages[nbTAB - 1].Controls.Add(this.axPDF);
                    this.axPDF = new AxAcroPDFLib.AxAcroPDF();
                    axPDF.Location = new System.Drawing.Point(0, 0);
                    axPDF.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
                            | System.Windows.Forms.AnchorStyles.Left)
                            | System.Windows.Forms.AnchorStyles.Right)));
                    axPDF.Size = new System.Drawing.Size(this.tabControl1.TabPages[0].Width, this.tabControl1.TabPages[0].Height);
                    //this.tabControl1.TabPages[nbTAB].Controls.Add(this.axPDF);
                    this.axPDF.src = srcPDF;
                }
            }
            else
            {
                tabControl1.TabPages.Add(srcREF);
                //this.tabControl1.TabPages[nbTAB].Controls.Add(this.axPDF);
                this.axPDF = new AxAcroPDFLib.AxAcroPDF();
                axPDF.Location = new System.Drawing.Point(0,0);
                axPDF.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
                        | System.Windows.Forms.AnchorStyles.Left)
                        | System.Windows.Forms.AnchorStyles.Right)));
                axPDF.Size = new System.Drawing.Size(this.tabControl1.TabPages[0].Width, this.tabControl1.TabPages[0].Height);
                this.tabControl1.TabPages[0].Controls.Add(this.axPDF);
                this.axPDF.src = srcPDF;
            }

Je sais pas si j'ai été clair, mais c'est pas facil à expliquer comme ca ..
Merci d'avance