PropertyGrid'de dize için Visual Studio benzeri bir düzenleyiciye sahip olmanın en kolay yolu nedir? Örneğin Autos/Locals/Watches'da dize değerlerini in-line olarak önizleyebilir/düzenleyebilirsiniz, ancak ayrıca büyüteç üzerine tıklayıp harici pencerede dize görebilirsiniz.C# özellik ızgara dize düzenleyicisi
cevap
Bunu aşağıdaki gibi bir UITypeEditor
aracılığıyla yapabilirsiniz. Burada bireysel mülkiyet kullanıyorum ama (bütün özelliklerini süslemek gerek kalmaması) IIRC da tüm dizeleri subvert:
using System;
using System.ComponentModel;
using System.Drawing.Design;
using System.Windows.Forms;
using System.Windows.Forms.Design;
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
using(var frm = new Form { Controls = { new PropertyGrid {
Dock = DockStyle.Fill, SelectedObject = new Foo { Bar = "abc"}}}})
{
Application.Run(frm);
}
}
}
class Foo
{
[Editor(typeof(FancyStringEditor), typeof(UITypeEditor))]
public string Bar { get; set; }
}
class FancyStringEditor : UITypeEditor
{
public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
{
return UITypeEditorEditStyle.Modal;
}
public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
{
var svc = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));
if (svc != null)
{
using (var frm = new Form { Text = "Your editor here"})
using (var txt = new TextBox { Text = (string)value, Dock = DockStyle.Fill, Multiline = true })
using (var ok = new Button { Text = "OK", Dock = DockStyle.Bottom })
{
frm.Controls.Add(txt);
frm.Controls.Add(ok);
frm.AcceptButton = ok;
ok.DialogResult = DialogResult.OK;
if (svc.ShowDialog(frm) == DialogResult.OK)
{
value = txt.Text;
}
}
}
return value;
}
}
tüm için bu uygulamak için dize üyeler: yerine [Editor(...)]
ekleme yere erken uygulamasında aşağıdaki geçerlidir:
TypeDescriptor.AddAttributes(typeof(string), new EditorAttribute(
typeof(FancyStringEditor), typeof(UITypeEditor)));
Aslında cevabınızı reddetmeliyim, çünkü tembel bir şekilde gitmemi ve sadece kopyalayıp kodunuzu yapıştırmamı teşvik ediyor. ;) – John
Evet, bu kod mükemmel, basit ve hemen çalışıyor. Teşekkürler – IEnumerable
- 1. Özel TSetProperty özellik düzenleyicisi oluşturma
- 2. Özellik için ASP.NET MVC düzenleyicisi şablonu
- 3. Kullanıcı Denetimleri - Maske Özellik Düzenleyicisi Sayı
- 4. Neden javascript'te bir dize nesnesine özellik ekleyemiyorum?
- 5. Visual Studio'ya Özel Renk Paleti Renk Özellik Düzenleyicisi
- 6. Özellik ağacını dize ile hizalayın
- 7. gwt düzenleyicisi
- 8. dize, C#
- 9. Objective-C Özellik Erişimi
- 10. C# UserControl Görünür Özellik
- 11. C# Özellik Adlandırılmış Olay
- 12. dönüştürme dize değeri özellik adı itiraz
- 13. C ile Unity'de 2D oyun tahtası/ızgara oluşturma C#
- 14. ızgara arama
- 15. JS/jQuery Resim Düzenleyicisi
- 16. "Sublime Text" düzenleyicisi
- 17. Xcode 4.3 düzenleyicisi
- 18. ücretsiz sql kod düzenleyicisi?
- 19. Özellik Adı Lambda Expression C#
- 20. Scratch'ten Metin/Kod Düzenleyicisi Oluşturma
- 21. Öğenin türünü C# düzenleyicisi penceresinde geçerli konumla bul
- 22. Dize sorgusunu dize dizisine dönüştürme - C#
- 23. dize dönüştürmüyor çift dize çalışmıyor C#
- 24. C# dize işleme sorunu
- 25. Dize Akışı C
- 26. Dize datetime dönüştürme C#
- 27. Dize yineleme C# mono
- 28. Bölünmüş dize C# (çeşit)
- 29. Özel dize karşılaştırma C#
- 30. C++ dize (nub uyarı)
kendi UITypeEditor ile * Bu bazı * yapabilirsiniz. –