Я добавлю это сюда, хотя вопрос немного устарел - я сделал это не так, как другие, переопределив метод Paint
в элементе управления, чтобы нарисовать прозрачную рамку. Я использовал класс, унаследованный от базового DataGridView
, а затем предоставил некоторые дополнительные свойства и переопределение для метода OnPaint
. Возможно, вы сможете сделать это и в событии Paint
, но для себя я уже создал нашу собственную версию элемента управления.
Преимущество этого состоит в том, что вы не меняете какой-либо цвет / форматирование строки / ячейки, которые вы уже настроили, а просто хотите затемнить элемент управления, когда он отключен.
Просто установите DisableColor
(например, черным), чтобы уменьшить его яркость (вы также можете изменить альфа-канал с помощью свойства DisableColorAlpha
). В противном случае он действует как всегда.
/// <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);
}
}
}