Propriétés custom d'un activeX en C#

esopio Messages postés 11 Date d'inscription mardi 10 juin 2008 Statut Membre Dernière intervention 23 septembre 2008 - 10 juin 2008 à 10:32
esopio Messages postés 11 Date d'inscription mardi 10 juin 2008 Statut Membre Dernière intervention 23 septembre 2008 - 10 juin 2008 à 11:16
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 :
<!-- BEGIN TEMPLATE: bbcode_code -->

Code :
<!--[if !IE]><--><!----><!--[endif]--><!--[if IE]>
<![endif]-->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;

<!-- END TEMPLATE: bbcode_code -->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 je pouvais déclarer des propriétés custom (personalisé quoi) et leur affecter les valeurs de mes attributs, les données seraient sauvegarder.
Sinon j'ai la solution de la sauvegarde dans un XML, mais je pense que c'est moins propre quand même.

Une idée ?
merci

2 réponses

Tilois Messages postés 721 Date d'inscription dimanche 10 juin 2001 Statut Membre Dernière intervention 27 mars 2011 7
10 juin 2008 à 10:42
Ton userControl ne conserve effectivement pas les données dans les champs. Puisqu'ils sont remis à zéro lors de chaque instanciation du controle.
Si tu veux faire de la persistance des données il va falloir écrire tes données quelque part que ce soit en XML, une base de données ou sous tout autre format.
0
esopio Messages postés 11 Date d'inscription mardi 10 juin 2008 Statut Membre Dernière intervention 23 septembre 2008
10 juin 2008 à 11:16
L'idéal serait tout de même d'avoir accès aux propriétés de l'activeX. Mais c'est vrai que la tâche semble ardue. Ayant déjà eu à faire avec la programmation C++ d'un MFC activeX control, je peux dire que l'ajout de propriétés personnalisées se fait à l'aide de wizards. Alors le faire via C# semble effectivement pénible.
0
Rejoignez-nous