2008-12-11 20 views
11

Bir özellik ve bir getter ve bir setter sahip olan bir string özelliğim var, bu çok uzun olan PropertyGrid dize değerini keser. PropertyGrid'i bir üç noktaya gösterecek şekilde nasıl zorlayabilirim ve sonra da özelliğin kolayca düzenlenmesi için çok satırlı bir metin kutusu içeren bir iletişim kutusu açabilirim? Muhtemelen mülk üzerinde bir çeşit öznitelik ayarlamak zorunda olduğumu biliyorum, ama hangi özellik ve nasıl? Diyaloğumun bazı özel tasarımcı arayüzlerini uygulamak zorunda mı?PropertyGrid'i belirli bir özellik için özel bir iletişim kutusu gösterecek şekilde nasıl zorlayabilirim?

Güncelleme: This muhtemelen benim sorunun cevabı, ama arayarak bulamadım. Benim sorum daha genel ve onun cevabı herhangi bir özel editör türünü oluşturmak için kullanılabilir.

cevap

17

Özellik için bir [Editor(...)] ayarlamanız gerekir; bu, düzenleme yapan bir UITypeEditor verir; şöyle

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; 
    } 
} 

(kendi editörü ile ...) İstediğiniz gibi davranmaya mevcut özelliklerine bakarak varolan Editör izini ablt olabilir.

+1

Hızlı cevap için teşekkürler. Şimdilik size bir +1 veriyorum ve bunu doğru bir cevap olarak işaretleyeceğim. – flipdoubt

+0

Propertygrid'de 'Bar' metin kutusunu ayarlamak mümkün mü? Bu nedenle Kullanıcı metin metnine doğrudan metin kutusuna yapıştırılamıyor, ancak yalnızca bir iletişim kutusu aracılığıyla mümkün mü? ReadOnly (true) özniteliğini eklerseniz, setter çağırılmıyor. – lerner1225

+0

@ lerner1225 Do-tipi olmayan bir dönüştürücüye ihtiyacınız var - bkz. Http://stackoverflow.com/a/30194849/127670 –

İlgili konular