Ya no necesitas buscar más en otros sitios porque llegaste al lugar justo, tenemos la solución que necesitas hallar sin problema.
El editor que le ayuda a elegir el color en Visual Studio es ColorEditor
que no conserva colores personalizados en diferentes controles. Para resolver el problema, debe:
- Crea una personalizada
UITypeEditor
Residencia enColorEditor
- Registre el editor para el tipo
Color
en el inicio de Visual Studio
Aquí hay una respuesta detallada que incluye los códigos que utilicé para resolver el problema.
Crear CustomColorEditor
ColorEditor
usa un privado ColorUI
clase para mostrar un privado ColorPalette
control. La paleta utiliza un array de colores para mostrar colores personalizados.
Crear CustomColorEditor
Yo derivé de ColorEditor
y usando la reflexión, encontró esos miembros y llenó el array usando un static array de algunos colores para mostrar en la primera carga. Luego, después de cerrar el editor, obtengo colores personalizados del editor y los coloco en el static array e inicialice el editor de color usando este static array en la próxima carga. De esta forma, los colores personalizados se comparten entre todas las instancias de mi CustomColorEditor
.
Mostrar CustomColorEditor en lugar del ColorEditor predeterminado
Para mostrar un editor de tipos de interfaz de usuario para todas las propiedades de un tipo específico, debe agregar un Editor
attribute al tipo. Pero desde Color
no es mi tipo, como puedo agregar Editor
attribute ¿lo?
TypeDescriptor.AddAttributes
me ayudó a registrar al editor para Color
escribe.
¿Dónde debo ejecutar el código para registrar el attribute? ¡Seguramente en tiempo de ejecución de Visual Studio!
Para hacerlo, creé un proyecto de paquete de Visual Studio y puse el código de registro en Initialize
método de empaque. Yo también agregué ProvideAutoLoad
attribute a la clase del paquete para que se cargue automáticamente cuando abro una solución.
Luego instalé el paquete.
Luego puse el dll en GAC usando gacutil.exe /i "path to dll"
. En lugar de GAC también puede poner el dll en Visual Studio cerca devenv.exe
porque el tiempo de ejecución visual stusio lo usará para mostrar mi editor de color personalizado para todas las propiedades de color.
Conclusión
Después de realizar las tareas anteriores, abrí una nueva instancia de Visual Studio y en mi proyecto de Windows Forms, veo mi editor de color personalizado que se muestra para los colores. Se muestran los colores iniciales que configuré. ¡Además, el editor de color conservaba colores personalizados incluso entre diferentes formas!
Compartí los códigos aquí. Puede utilizar la idea y los códigos para mejorar el editor. Puede proporcionar sus colores personalizados para que se muestren en el editor al principio. Incluso puede agregar otra pestaña al editor. Aquí están mis códigos:
Código para el editor de color
class CustomColorEditor : ColorEditor
private static Color[] Colors;
static CustomColorEditor()
Colors = new Color[]
Color.Red, Color.Green, Color.Blue, Color.White,
Color.White, Color.White, Color.White, Color.White,
Color.White, Color.White, Color.White, Color.White,
Color.White, Color.White, Color.White, Color.White,
;
public override object EditValue(ITypeDescriptorContext context, System.IServiceProvider provider, object value)
BindingFlags.NonPublic);
var palObject = palField.GetValue(colorUiObject);
var palCustomColorsField = palObject.GetType().GetField("customColors", BindingFlags.Instance
Código del paquete
[PackageRegistration(UseManagedResourcesOnly = true)]
[InstalledProductRegistration("#110", "#112", "1.0", IconResourceID = 400)]
[Guid(GuidList.guidVSPackage1PkgString)]
[ProvideAutoLoad(Microsoft.VisualStudio.Shell.Interop.UIContextGuids80.SolutionExists)]
public sealed class VSPackage1Package : Package
public VSPackage1Package()
protected override void Initialize()
base.Initialize();
TypeDescriptor.AddAttributes(typeof(Color), new EditorAttribute(typeof(CustomColorEditor), typeof(UITypeEditor)));
Resultado
Este sería el resultado en la ventana de propiedades de Visual Studio. Mira eso Red
, Green
, Blue
en la parte inferior del cuadro de diálogo que agregamos: