2010-12-03 6 views
19

j'ai appris DesignMode ici How to refresh a winform custom control at design time after changing a propertyWinform contrôle personnalisé: DesignMode ne retourne pas vrai alors que dans le mode Création

Mais quand dans le constructeur de mon contrôle personnalisé que je l'utilise, il retourne jamais vrai quand je fais glisser-déposer mon contrôle personnalisé montre toujours max = 200 alors quel est le problème?

if (this.DesignMode) 
{     
    this.Min = 0; 
    this.Max = 100; 
} 
else 
{ 
    this.Min = 0; 
    this.Max = 200;    
} 

this.LabMin.Text = this.Min.ToString(); 
this.LabMax.Text = this.Max.ToString(); 
+0

Une raison particulière pour laquelle vous voulez que la valeur max soit plus élevée au moment de l'exécution qu'au moment de la conception? –

+0

Non, c'est juste pour tester la valeur différente de designmode 2 :) – user310291

Répondre

34

LicenseManager.UsageMode est destiné à cet effet.

C'est en fait le seul moyen fiable de détecter si votre commande est en mode conception ou non. Ce n'est valable que pendant le constructeur, mais il peut facilement être stocké dans un champ de la classe pour référence ultérieure.

La propriété DesignMode pour les contrôles imbriqués sera false même lorsque le contrôle de conteneur est en mode conception.

+4

Merci pour la suggestion, je vais essayer, mais c'est vraiment moche de Microsof Je suis très en colère, donnant un nom qui doesn Ne fais pas ce que son nom veut dire est une honte. – user310291

+0

Quel champ complètement inutile. Merci Microsoft jeez. –

3

Pour ce dont je me souviens dans le Ctor la propriété DesignMode n'a pas encore sa valeur. Vous devriez l'utiliser après initializeComponents ou dans un gestionnaire d'événement.

+0

+1 Ceci est généralement correct: la propriété 'DesignMode' retournera toujours" False "dans une méthode de constructeur. Toutefois, un appel à la méthode 'InitializeComponents' ne peut pas être pris en compte pour modifier de manière fiable ce comportement. Vous devez l'utiliser dans un gestionnaire d'événements (comme suggéré), une propriété ou une autre méthode. –

4

Il se pourrait que le contrôle doit aussi doit avoir un ISite qui lui est associée, sinon il retournera toujours false

L'indicateur de mode de conception est stocké dans le ISite; par conséquent, si le composant n'a pas un ISite associé à , la valeur de cette propriété est false.

Source: MSDN

Modifier: Voir aussi ce poste quelqu'un avait un problème similaire à celui que vous êtes confronté à

Windows Forms designer and DesignMode property issues

Edit 2: Je aussi trouvé un site qui semble indiquer qu'il s'agit d'un problème commun avec les contrôles personnalisés, mais il répertorie également quelques solutions de contournement. Vous pouvez le trouver ici:

Custom Control Design Mode Problem

+1

Wow merci, mais quel sale plomberie désordre juste pour faire quelque chose de simple dans l'intention parfois je déteste vraiment Microsoft :) – user310291