Bonjour,

Aujourd'hui je suis capable de coder un objet activeX en C# par l'intermédiaire d'un userControl C#. Il suffit pour cela d'ajouter quelques lignes que voici dans ma classe héritant de UserControl :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
 
public partial class MonUserControl : UserControl
    {
        #region	Code interoperabilité activeX - C# à ne pas supprimer
        [ComRegisterFunction]
        public static void RegisterClass(Type t)
        {
            string keyName = @"CLSID\" + t.GUID.ToString("B");
            using (RegistryKey key =
            Registry.ClassesRoot.OpenSubKey(keyName, true))
            {
                key.CreateSubKey("Control").Close();
                using (RegistryKey subkey = key.CreateSubKey("MiscStatus"))
                {
                    subkey.SetValue("", "131457");
                }
                using (RegistryKey subkey = key.CreateSubKey("TypeLib"))
                {
                    Guid libid = Marshal.GetTypeLibGuidForAssembly(t.Assembly);
                    subkey.SetValue("", libid.ToString("B"));
                }
                using (RegistryKey subkey = key.CreateSubKey("Version"))
                {
                    Version ver = t.Assembly.GetName().Version;
                    string version = string.Format("{0}.{1}", ver.Major, ver.Minor);
                    if (version == "0.0") version = "1.0";
                    subkey.SetValue("", version);
                }
            }
        }
 
        [ComUnregisterFunction]
        public static void UnregisterClass(Type t)
        {
            // Delete entire CLSID\{clsid} subtree
            string keyName = @"CLSID\" + t.GUID.ToString("B");
            Registry.ClassesRoot.DeleteSubKeyTree(keyName);
        }
        #endregion
 
 
/*La je peux commencer à coder comme si je développais un objet UserControl C# basique. */
        private int unAttributExemple;
En toute honnêteté, je ne comprends pas réellement la signification de ces lignes, mais cela marche donc jusqu'ici je suis content. Mais j'ai un petit problème. Mon UserControl est sensé s'insérer sur des slides powerpoint et interagir avec l'utilisateur. Le problème est que mes attributs de classe C# (de mon UserControl et des autres classes) se sont pas sauvegardées dans le document (par exemple unAttributExemple dans le code ci-dessus). Du coup je perds toutes mes données quand je réouvre un document ppt sauvegardé avec mes UserControl et il n'y a plus d'intérêt à la chose. Alors peut être avez-vous déjà rencontré ce problème ou avez-vous une idée pour le résoudre.

Personnellement je pense que si j'avais accès aux propriétés du control activeX, mes données seraient enregistrées dans le fichier .ppt... Mais je ne vois pas comment faire.