2017-08-04 5 views
-1

J'ai une barre de menu contextuel (contextColorOptions) qui permet de changer la couleur d'arrière-plan et la couleur de tout sourcecontrol accédé à la bande du menu contextuel. Je veux être en mesure d'affecter tous les contrôles dans mon formulaire pour avoir la même bande de menu contextuel.Comment puis-je ajouter une bande de menu contextuel à tous les contrôles sur un formulaire Win en C#

J'ai essayé ceci:

 foreach (Control cntrl in this.Controls) 
     { 
      cntrl.ContextMenuStrip = contextColorOptions; 
     } 

Mais cela ne semble pas fonctionner. Quelqu'un a-t-il une idée? Merci d'avance!

Répondre

0

Attention, tous les contrôles n'ont pas les mêmes propriétés et vous pouvez appeler de la même manière. Vous devez vérifier avant si ce contrôle a un nom de propriété appelé backcolor, forecolor ou contextmenustrip. La clé interroge le type du contrôle et change de couleur sur les arrière-plans et les panneaux, et définit la couleur transparente pour tout à l'intérieur.

Il existe d'autres moyens simples mais cela fonctionne:

foreach (Control cntrl in this.Controls) 
     { 
      if (cntrl.getType() == "System.Windows.Forms.Form") 
        cntrl.ContextMenuStrip = contextColorOptions; 
     } 

Hope this help !!. Si vous whant pour obtenir les propriétés d'un contrôle pour vérifier si le contrôle a la propriété que vous voulez, vous devez utiliser quelque chose comme ceci:

var controlType = control.GetType(); 
     var property = controlType.GetProperty("The property you are looking for", BindingFlags.Static | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); 

si la propriété = null you got it :)