2009-11-10 7 views
7

J'ai un contrôle d'utilisateur Windows Form avec une propriété de chaîne pour définir le texte d'une zone de texte. Cette chaîne peut être multi-ligne.Autoriser les propriétés de chaîne multiligne dans la fenêtre Propriétés

J'ai remarqué que sur certains contrôles avec une propriété texte, et au lieu d'être obligé de taper dans la zone de texte de propriétés de ligne unique, vous obtenez un petit pop-up où vous pouvez taper plusieurs lignes. (En fait, un contrôle Windows Forms Textbox le permet sur la propriété Text.)

Comment activer cette fonctionnalité dans la fenêtre des propriétés de la propriété que j'ai conçue?

Ce qui suit est pas de code réel dans mon application, mais un exemple de la façon dont une telle propriété peut être définie

public string Instructions 
{ 
    get 
    { 
     return TextBox1.Text; 
    } 
    set 
    { 
     TextBox1.Text = value; 
    } 
} 

Répondre

14

Vous pouvez utiliser le EditorAttribute avec un MultilineStringEditor:

[EditorAttribute(typeof(MultilineStringEditor), 
       typeof(System.Drawing.Design.UITypeEditor))] 
public string Instructions 
{ 
    get 
    { 
     return TextBox1.Text; 
    } 
    set 
    { 
     TextBox1.Text = value; 
    } 
} 

Pour éviter d'ajouter une référence à System.Design et donc d'utiliser l'infrastructure complète, vous pouvez également écrire l'attribut comme suit:

[EditorAttribute(
    "System.ComponentModel.Design.MultilineStringEditor, System.Design", 
    "System.Drawing.Design.UITypeEditor")] 

Bien que ce soit moins un problème maintenant qu'ils ont cessé de scinder l'infrastructure en un profil client et un complet.

+1

Désolé, il me manque des références. Je n'obtiens pas le MiltilineStringEditor comme option dans mon Intellisense. Même lorsque j'utilise System.ComponentModel.Design.MultilineStringEditor. Et il ne compilera pas. Si je peux le faire fonctionner, je vais vous donner le crédit pour la bonne réponse, bien que ... – David

+1

vous devez faire référence à 'System.Design.dll' – manji

+1

Parfait. Je l'ai trouvé seul et je revenais juste pour le poster comme commentaire. Je vous remercie. Je vais garder cela ouvert pour un jour ou deux afin que j'espère que vous obtiendrez des votes sur la réponse à côté de la mienne. C'était une connaissance assez obscure, et je pense que vous devriez être récompensé. – David

Questions connexes