begin process at 2010 02 10 02:05:27
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C#

 > 

Windows

 > 

Formulaire / Winforms / Controls

 > 

Lien avec le Eventhandler perdu


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Lien avec le Eventhandler perdu

lundi 26 mai 2008 à 10:57:08 | Lien avec le Eventhandler perdu

darb66

Bonjour à tous,

J'ai développé un Addin pour PowerPoint 2007 et j'ai quelques soucis avec l'EventHandler des nouveaux boutons... Je m'explique:
1) Je crée une nouvelle bar d'outils avec un bouton de type popup
Office.CommandBar menuBar = this.Application.CommandBars.Add("My Tools", Office.MsoBarPosition.msoBarTop, false, true);
menuBar.Visible = true;
Office.
CommandBarPopup ButtonColor = (Office.CommandBarPopup)menuBar.Controls.Add(Office.MsoControlType.msoControlPopup, missing, missing, missing, true);
ButtonColor.Caption = "Select Color";
ButtonColor.Visible = true;

2) J'ajoute dynamiquement des boutons pour ce-dernier en spécifiant la fonction lors d'un Click
Office.CommandBarButton ButtonCurrentColor;
for (int i = 0; i < COLORNAMES.GetLength(0); i++)
  {
    ButtonCurrentColor = (Office.CommandBarButton)ButtonColor.Controls.Add(Office.MsoControlType.msoControlButton, missing, missing, missing, true);
    ButtonCurrentColor.Style = Office.MsoButtonStyle.msoButtonIconAndCaption;
    ButtonCurrentColor.Caption = COLORNAMES[i, 0];
    ButtonCurrentColor.Picture = vln_ImageConverter.Convert((System.Drawing.Bitmap)Resources.ResourceManager.GetObject(COLORNAMES[i, 1]));
    ButtonCurrentColor.Click += new Office._CommandBarButtonEvents_ClickEventHandler(ButtonColor_Click);
  }


3) La fonction "
ButtonColor_Click" assigne la couleur au texte sélectionné...
this.Application.ActiveWindow.Selection.TextRange.Font.Color.RGB = sColor;

Cela fonctionne parfaitement bien... sauf lorsque j'utilise d'abord un autre bouton - créé précédemment par le même Addin - qui ouvre une nouvelle fenêtre. Je n'arrive pas à expliquer pourquoi, suite aux lignes de code ci-dessous, mes EventHandler déclarés ci-dessus ne fonctionnent plus. Il ne se passe absolument rien...

Form myForm = new Form();
myForm.Show();

Est-ce que quelqu'un pourrait m'aider? Merci d'avance pour votre collaboration
mardi 27 mai 2008 à 09:52:20 | Re : Lien avec le Eventhandler perdu

darb66

Réponse acceptée !
J'ai résolu le problème  Pour les personnes intéressées, voici le descriptif de la solution trouvée sur Google Group:
Make sure you keep a reference to that button all the time. I had the same
problem. Maybe the garbage collector decides to release the object at some
point, because there is no reference to the button. I mean, if you create a
button in a method, and you declare the button object in that method, after
that you set an event handler and leave the method, the reference to the
button goes out of scope. Because of setting the event, interop mechanism
keeps a reference to the event handler for some time only. Maybe it is a
good idea to define the button object public static somewhere.


1) J'ai donc créé dans ma classe une liste qui contiendra mes boutons
private List<Office.CommandBarButton> ButtonColors;

2) Et j'ajoute mes boutons lors de leur création dans la boucle "for" (cf. Point 2 du précédent post)
for (int i = 0; i < COLORNAMES.GetLength(0); i++)
  {
    ...
    ButtonColors.Add(ButtonCurrentColor);
  }


Cela a pour effet de toujours garder une référence sur les boutons créés. Le Garbage Collector ne supprimera donc plus mes Event OnClick...


Cette discussion est classée dans : office, true, missing, buttoncolor, buttoncurrentcolor


Répondre à ce message

Sujets en rapport avec ce message

Inserer une image dans un fichier Excel [ par Tuizi ] Bonjour, Voila je viens de passer sous C# et donc j'ai un petit problème avec Excel, en effet sous VB.NET j'arrive à écrire dans une cellule ainsi qu' Lister toutes les feuilles d'un classeur Excel [ par achleuhi ] Bonjour tous le monde,Je cherche un moyen de lister toutes les feuilles d'un classeur Excel, je ne connais pas le noms des feuilles à l'avance je suis VSTO Word 2003 [ par max12 ] Bonjour,J'ai un soucis avec VSTO pour le développement d'un Add-Ins en C# framework 3.5 Visual Studio 2008 pour Microsoft Word 2003. Premierement, qua Comment créer un fichier excel en winform? [ par vinzemuls ] Bonjour,j'aimerai pouvoir créer un fichier excel d'une application winforms.Mais je ne trouve rien pour m'aider.J'ai apparament vu qu'il fallait ajout PowerPoint Addin >> Niveau des puces pour créer un hierarchie [ par darb66 ] Bonjour, je développe un Addin pour PowerPoint afin que les utilisateurs puisse séléctionner les styles que j'aurai au préalable défini dans mes fonct Executer un process, sous un nom d'utilisateur spécifique, par un service windows [ par Rastafman ] Bonjour à tous, Voilà je me retrouve face à un problème assez étrange. J'ai créé un service Windows qui doit lancer un process sous un utilisateur spé excel et c#, problème d'interop [ par siilex ] Bonjour,Je suis en train de développer un petit programme en C# utilisant les interop Excel pour ouvrir, lire, editer et enregistrer un fichier .xls.J Fichiers Office : mot de passe ou pas [ par mattluna ] Bonjour,je suis en train de développer un petit outil qui ouvre tous les docs présents dans un répertoire donné afin d'en extraire Oû sont stockeés les parametres d'un fichier OFFICE?? [ par sghchafaa ] Bonjour;Peut est je savoir oû sont stockeés les paramétres(taille,date de création,date de modification,contenu du fichier,format,polices utilisées,mi imposer le printer dans printdialog [ par olibara ] BonjourDepuis mon application, j'aimerais ouvrir le printdialog mais en proposant une autre imprimante que l'imprimante par défautEst-ce possible ?J'e


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,468 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales