I Agregaré esto aquí aunque la pregunta sea un poco antigua: lo hice de manera diferente a estos otros anulando el método Paint
en el control para dibujar un cuadro transparente. Usé una clase heredada de la base DataGridView
y luego proporcioné algunas propiedades adicionales y una anulación para el método OnPaint
. También puede hacer esto en el evento Paint
, pero yo ya había creado nuestra propia versión del control.
Esto tiene la ventaja de no cambiar el color/formato de fila/celda que ya ha configurado y solo desea atenuar el control cuando está desactivado.
Simplemente configure DisableColor
(a negro por ejemplo) para que se atenúe (también puede alterar el canal alfa con la propiedad DisableColorAlpha
). De lo contrario, actúa como siempre lo hizo.
/// <summary>
/// Color used when the grid is disabled
/// </summary>
[Category("Appearance"), DefaultValue(typeof(Color), "Transparent"), Description("Color to use when the control is disabled (should be transparent)")]
public Color DisableColor { get; set; }
/// <summary>
/// Color used when the grid is disabled
/// </summary>
[Category("Appearance"), DefaultValue(50), Description("Alpha channel value for disabled color (0-255)")]
public int DisableColorAlpha { get; set; }
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
if (this.Enabled == false && DisableColor != Color.Transparent)
{
// paint a transparent box -- simulate disable
using (Brush b = new SolidBrush(Color.FromArgb(DisableColorAlpha, DisableColor)))
{
e.Graphics.FillRectangle(b, e.ClipRectangle);
}
}
}
Respete los colores del sistema y use 'SystemColors.Control' no con un gris codificado. – MarkJ
todos aceptan el gris claro como deshabilitado. eso es universal. – Timmerz