33

に複数行の文字列用の組み込みエディタはありますかPropertyGrid

4

4 に答える 4

55

次のように使用できることがSystem.Design.dllわかりました。System.ComponentModel.Design.MultilineStringEditor

public class Stuff
{
    [Editor(typeof(MultilineStringEditor), typeof(UITypeEditor))]
    public string MultiLineProperty { get; set; }
}
于 2008-09-24T21:46:15.250 に答える
2

いいえ、モーダル UI タイプ エディターと呼ばれるものを作成する必要があります。UITypeEditor から継承するクラスを作成する必要があります。これは基本的に、編集中のプロパティの右側にある省略記号ボタンをクリックすると表示されるフォームです。

私が見つけた唯一の欠点は、特定の文字列プロパティを特定の属性で装飾する必要があることでした。私がそれをしなければならなかったのは久しぶりです。この情報は、Chris Sells の「Windows Forms Programming in C#」という本から入手しました。

VisualHint によるSmart PropertyGrid.NETと呼ばれる商用のプロパティグリッドがあります。

于 2008-09-24T21:26:17.857 に答える
2

プロパティ グリッドで複数行のサポートを取得するには、カスタム エディターを作成する必要があります。

これは、 UITypeEditorから実装された顧客のテキスト エディター クラスです。

public class MultiLineTextEditor : UITypeEditor
{
    private IWindowsFormsEditorService _editorService;

    public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
    {
        return UITypeEditorEditStyle.DropDown;
    }

    public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
    {
        _editorService = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));

        TextBox textEditorBox = new TextBox();
        textEditorBox.Multiline = true;
        textEditorBox.ScrollBars = ScrollBars.Vertical;
        textEditorBox.Width = 250;
        textEditorBox.Height = 150;
        textEditorBox.BorderStyle = BorderStyle.None;
        textEditorBox.AcceptsReturn = true;
        textEditorBox.Text = value as string;

        _editorService.DropDownControl(textEditorBox);

        return textEditorBox.Text;
    }
}

カスタム プロパティ グリッドを作成し、この Editor 属性をプロパティに適用します。

class CustomPropertyGrid
{
    private string multiLineStr = string.Empty;

    [Editor(typeof(MultiLineTextEditor), typeof(UITypeEditor))]
    public string MultiLineStr
    {
        get { return multiLineStr; }
        set { multiLineStr = value; }
    }
}

メインフォームでこのオブジェクトを割り当てます

 propertyGrid1.SelectedObject = new CustomPropertyGrid();
于 2016-03-08T11:48:38.450 に答える
0

はい。どのように呼び出されたかはよく覚えていませんが、Items プロパティ エディターで ComboBox のようなものを探してください。

編集済み: @fryguybob の時点で、ComboBox.Items は System.Windows.Forms.Design.ListControlStringCollectionEditor を使用します

于 2008-09-24T21:26:38.947 に答える