2010-02-18 7 views
2

Excusez-moi si le titre était source de confusion, il m'a fallu près de 5 minutes pour penser enfin d'un titre pour celui-ci ...Interactive Design-Time Control utilisateur

Bon, vous savez comment dans Visual Studio Express lorsque vous ajouter un TabControl au formulaire, et vous pouvez cliquer sur la flèche droite en haut à droite de la TabControl et il va ajouter un nouveau TabPage, ou en supprimer un?

Eh bien, je crée un utilisateur Control où j'ai besoin de personnes pour pouvoir basculer entre les panneaux (mon contrôle utilisateur est composé de plusieurs panneaux). Je sais que c'est possible car j'ai utilisé un ruban Control dans le passé et vous pourriez ajouter de nouveaux boutons etc dans la vue Designer.

Quelqu'un peut-il fournir des suggestions/conseils sur la façon dont je pourrais y arriver?

Merci

+0

Je * pense * que vous faites allusion à ce qu'on appelle une «étiquette intelligente», mais je peux me tromper. – Ken

Répondre

0

Lorsque vous effectuez un contrôle qui est héritée de Control, vous devez utiliser deux propriétés telles que IsDesignMode, vous pouvez construire des gestionnaires d'événements spécialement pour l'intérieur Design Mode:

 
if (IsDesignMode){ 
    // Handle the interactivity in Design mode, such as changing a property on the 
    // Properties toolbox 
} 

Supposons que le contrôle a un événement tel que MouseClick, vous pouvez le faire:

 
private void control_MouseClick(object sender, MouseEventArgs e){ 
    if (IsDesignMode){ 
     // Do something here depending on the Click event within the Designer 
    }else{ 
     // This is at run-time... 
    } 
} 

Un autre que je peux penser est « ShouldSerialize » suivi d'une propriété accessible au public afin de persister la propriété au code généré concepteur, supposons par exemple un contrôle a une propriété booléenne Foo

 
public bool Foo{ 
    get{ return this._foo; } 
    set{ if (this._foo != value){ 
       this._foo = value; 
     } 
     } 
} 

public bool ShouldSerializeFoo(){ 
    return true; // The property will be persisted in the designer-generated code 
       // Check in Form.Designer.cs... 
} 

Si ShouldSerializeFoo retourne faux , aucune propriété n'est persistée, c'est l'inverse quand elle est vraie, elle sera enterrée dans le code Form.Designer.cs ...

Espérons que cela aide, Cordialement, Tom.

3

Si je comprends bien votre question, vous parlez de étiquettes intelligentes.

Le processus est un peu impliqué, donc je ne vais pas essayer de poster un échantillon complet. Au lieu de cela, je vais vous référer à this tutorial sur le sujet. Pour faire court, vous devez créer un concepteur personnalisé et enregistrer une ou plusieurs actions personnalisées. Vous pouvez l'utiliser pour créer une liste déroulante répertoriant les panneaux disponibles et basculer entre eux lorsque l'élément sélectionné est modifié. (Remarque - le terme «balises actives» a deux significations distinctes dans Visual Studio - je parle spécifiquement des balises actives du concepteur visuel, pas des balises actives dans l'éditeur de code).

+1

+1 @Aaronaught: tutoriel sympa ... hhmmm ... priorités prioritaires ... * enregistrer le lien pour plus tard * ... – IAbstract