gpt4 book ai didi

c# - 如何在鼠标悬停在任何单元格上时突出显示 datagridview 的行和/或列标签(在 c# 中)?

转载 作者:太空宇宙 更新时间:2023-11-03 16:48:36 27 4
gpt4 key购买 nike

使用 Windows 窗体上的 DataGridView 控件,当您将鼠标移到行标签(或列标签)上时,它(标签单元格)的背景会更改为蓝色阴影(或其他颜色,具体取决于您的 Windows 配色方案 否怀疑)。

我想在将鼠标移到网格中的任何单元格上时产生这种效果 - 即突出显示鼠标当前悬停的行的行标签。

使用鼠标悬停事件更改当前行样式的逻辑非常简单。我可以更改行的其他属性(比如背景颜色),但我真的想要比这更微妙的东西,我认为突出显示行标签会非常有效。

可以吗?如果可以的话怎么做? (最好是 C#)

最佳答案

您可以覆盖 OnCellPainting事件做你想做的事。取决于你的大小DataGridView ,您可能会看到闪烁,但这应该可以满足您的要求。


class MyDataGridView : DataGridView
{
private int mMousedOverColumnIndex = int.MinValue;
private int mMousedOverRowIndex = int.MinValue;

protected override void OnCellMouseEnter(DataGridViewCellEventArgs e)
{
mMousedOverColumnIndex = e.ColumnIndex;
mMousedOverRowIndex = e.RowIndex;
base.OnCellMouseEnter(e);
base.Refresh();
}

protected override void OnCellPainting(DataGridViewCellPaintingEventArgs e)
{
if (((e.ColumnIndex == mMousedOverColumnIndex) && (e.RowIndex == -1)) ||
((e.ColumnIndex == -1) && (e.RowIndex == mMousedOverRowIndex)))
{
PaintColumnHeader(e, System.Drawing.Color.Red);
}
base.OnCellPainting(e);
}

private void PaintColumnHeader(System.Windows.Forms.DataGridViewCellPaintingEventArgs e, System.Drawing.Color color)
{
LinearGradientBrush backBrush = new LinearGradientBrush(new System.Drawing.Point(0, 0), new System.Drawing.Point(100, 100), color, color);
e.Graphics.FillRectangle(backBrush, e.CellBounds);
DataGridViewPaintParts parts = (DataGridViewPaintParts.All & ~DataGridViewPaintParts.Background);
e.AdvancedBorderStyle.Right = DataGridViewAdvancedCellBorderStyle.None;
e.AdvancedBorderStyle.Left = DataGridViewAdvancedCellBorderStyle.None;
e.Paint(e.ClipBounds, parts);
e.Handled = true;
}
}

关于c# - 如何在鼠标悬停在任何单元格上时突出显示 datagridview 的行和/或列标签(在 c# 中)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4967786/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com