¿Cuál es la forma más fácil de tener un editor de tipo Visual Studio para cadena en PropertyGrid? Por ejemplo, en Autos/Locales/Relojes, puede previsualizar/editar valores de cadena en línea, pero también puede hacer clic en la lupa y ver cadena en la ventana externa.Editor de cadenas de cuadrícula de propiedad C#
Respuesta
Puede hacerlo a través de UITypeEditor
, como se muestra a continuación. Aquí estoy usando en una propiedad individual, pero IIRC También puede subvertir todas las cadenas (de modo que no es necesario para decorar todas las propiedades):
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;
}
}
Para aplicar esta para todos miembros de cadena: en lugar de añadir el [Editor(...)]
, se aplican los siguientes principios en algún lugar en la aplicación:
TypeDescriptor.AddAttributes(typeof(string), new EditorAttribute(
typeof(FancyStringEditor), typeof(UITypeEditor)));
Debo menospreciar tu respuesta, porque me alienta a ir de manera perezosa y simplemente copiar y pegar tu código. ;) – John
Sí, este código es perfecto, simple y funciona de inmediato. Gracias – IEnumerable
- 1. Grupo de radio en ExtJS Editor Cuadrícula/Cuadrícula
- 2. Uso del editor de colecciones .NET sin usar un control de cuadrícula de propiedad
- 3. Restablecer propiedades de una cuadrícula de propiedad
- 4. Querer un tipo de cuadrícula para un editor de píxeles
- 5. Plantilla de editor de ASP.NET MVC para la propiedad
- 6. ExtJS 4> Editor de cuadrícula> Editor con "datefield" xtype no se llena correctamente
- 7. Cómo cambiar DisplayNameAttribute en tiempo de ejecución para usar en una cuadrícula de propiedad C#
- 8. Usar un diccionario en una propiedad cuadrícula
- 9. Componente de cuadrícula/gráfico libre de C#
- 10. Biblioteca de cadenas C
- 11. C# formato de cadenas
- 12. C# Delegado de propiedad?
- 13. Visual C# "Editor de configuración" dentro de la aplicación?
- 14. ¿Cómo combinar cadenas de C++ y cadenas de Arduino?
- 15. ¿Hay un editor XML con vista de cuadrícula similar al de XMLSpy?
- 16. ¿Cómo se muestra una propiedad bool como Sí | No en la cuadrícula de propiedades?
- 17. C principiante: procesamiento de cadenas
- 18. Conjuntos de cadenas en C
- 19. procesamiento de cadenas en C#
- 20. División de cadenas en C++
- 21. optimización de cadenas literales C
- 22. Creador de cadenas C++ vacío
- 23. Editor liviano para C#?
- 24. Normalización de cadenas Unicode en C/C++
- 25. Configuración de la propiedad de la propiedad directamente en C#
- 26. Enlazar un parámetro de comando de menú contextual a una propiedad de cuadrícula de datos
- 27. ¿Qué control de cuadrícula/cuadrícula en WPF?
- 28. C concatenación de cadenas de constantes
- 29. Rendimiento de comparación de cadenas en C#
- 30. C análisis doble de cadenas de argumentos
se pueden hacer algunos * * de esto con su propio UITypeEditor. –