begin process at 2008 08 22 04:32:46
1 229 775 membres
46 nouveaux aujourd'hui
14 267 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Propriétés custom d'un activeX en C# [ Windows / ActiveX / COM ] (esopio)

Propriétés custom d'un activeX en C# le 10/06/2008 10:32:40

esopio
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 :
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 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

Re : Propriétés custom d'un activeX en C# le 10/06/2008 10:42:18

Tilois
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.

Re : Propriétés custom d'un activeX en C# le 10/06/2008 11:16:24

esopio
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.


Classé sous : version, activex, key, usercontrol, subkey

Participer à cet échange

Pub



Appels d'offres

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Boutique

Boutique de goodies CodeS-SourceS