2008-12-11 85 views
11

我有一個字符串屬性的類,有一個getter和setter,這通常是這樣長,PropertyGrid截斷字符串值。如何強制PropertyGrid顯示省略號,然後啓動包含多行文本框的對話框以便輕鬆編輯該屬性?我知道我可能必須在屬性上設置某種屬性,但是屬性和方式如何?我的對話框是否必須實現一些特殊的設計器界面?如何強制PropertyGrid顯示特定屬性的自定義對話框?

更新: This可能是我的問題的答案,但我無法通過搜索找到它。我的問題更一般,其答案可以用來構建任何類型的自定義編輯器。

回答

17

您需要爲該屬性設置一個[Editor(...)],給它一個UITypeEditor進行編輯;像這樣(用你自己的編輯器...)

using System; 
using System.ComponentModel; 
using System.Drawing.Design; 
using System.Windows.Forms; 
using System.Windows.Forms.Design; 


static class Program 
{ 
    static void Main() 
    { 
     Application.Run(new Form { Controls = { new PropertyGrid { SelectedObject = new Foo() } } }); 
    } 
} 



class Foo 
{ 
    [Editor(typeof(StringEditor), typeof(UITypeEditor))] 
    public string Bar { get; set; } 
} 

class StringEditor : UITypeEditor 
{ 
    public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context) 
    { 
     return UITypeEditorEditStyle.Modal; 
    } 
    public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value) 
    { 
     IWindowsFormsEditorService svc = (IWindowsFormsEditorService) 
      provider.GetService(typeof(IWindowsFormsEditorService)); 
     if (svc != null) 
     { 
      svc.ShowDialog(new Form()); 
      // update etc 
     } 
     return value; 
    } 
} 

你可能會ABLT追查通過觀察其行爲像你想現有的屬性現有的編輯器。

+1

感謝您的快速回答。我現在給你一個+1,一旦有機會在我的最後嘗試,我會將其標記爲正確答案。 – flipdoubt 2008-12-11 15:49:46

相關問題