Créer un controle dynamique

dosba91 Messages postés 13 Date d'inscription mardi 28 juin 2005 Statut Membre Dernière intervention 23 novembre 2006 - 21 nov. 2006 à 14:59
dosba91 Messages postés 13 Date d'inscription mardi 28 juin 2005 Statut Membre Dernière intervention 23 novembre 2006 - 23 nov. 2006 à 16:58
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

Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
21 nov. 2006 à 18:05
Salut, as tu essayé d'initialiser la propriété src uniquement apres que le controle ActiveX soit visible.
0
dosba91 Messages postés 13 Date d'inscription mardi 28 juin 2005 Statut Membre Dernière intervention 23 novembre 2006
22 nov. 2006 à 12:11
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
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
22 nov. 2006 à 23:17
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";
0
dosba91 Messages postés 13 Date d'inscription mardi 28 juin 2005 Statut Membre Dernière intervention 23 novembre 2006
23 nov. 2006 à 16:58
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
0
Rejoignez-nous