2009-11-10 7 views
7

Ich habe ein Windows Form User Control mit einer string -Eigenschaft, um den Text eines Textfelds zu setzen. Diese Zeichenkette kann mehrzeilig sein.Erlaube mehrzeilige String-Eigenschaften im Eigenschaftenfenster

Ich habe festgestellt, dass auf einigen Steuerelementen mit einer Texteigenschaft, und anstatt gezwungen werden, in die einzelne Zeile Eigenschaft Textfeld einzugeben, erhalten Sie ein kleines Pop-up, wo Sie mehrere Zeilen eingeben können. (Tatsächlich ermöglicht ein Windows Forms Textfeld-Steuerelement dies für die Eigenschaft Text.)

Wie aktiviere ich diese Funktionalität im Eigenschaftenfenster für die Eigenschaft, die ich entworfen habe?

Das folgende ist nicht wirklich Code in meiner Anwendung, aber ein Beispiel dafür, wie eine solche Eigenschaft könnte

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

Antwort

14

Sie können die EditorAttribute mit einem MultilineStringEditor verwenden definiert werden:

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

Um zu vermeiden, dass Sie einen Verweis auf System.Design hinzufügen und somit das Full-Framework benötigen, können Sie das Attribut auch so schreiben:

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

Obwohl dies jetzt kein Problem mehr ist, da sie das Framework nicht mehr in ein Clientprofil und ein vollständiges aufteilen.

+1

Sorry, ich muss einige Referenzen fehlen. Ich bekomme den MiltilineStringEditor nicht als Option in meinem Intellisense. Selbst wenn ich System.ComponentModel.Design.MultilineStringEditor verwende. Und es wird nicht kompilieren. Wenn ich es zur Arbeit bringen kann, werde ich Ihnen die richtige Antwort geben, obwohl ... – David

+1

müssen Sie auf "System.Design.dll" verweisen – manji

+1

Perfekt. Ich fand das selbst heraus und kam gerade zurück, um das als Kommentar zu posten. Vielen Dank. Ich werde das für einen Tag oder so offen halten, damit Sie hoffentlich ein paar Stimmen auf die Antwort neben meinem eigenen bekommen. Das war ein ziemlich obskures Stück Wissen, und ich denke, du solltest belohnt werden. – David