是否有某种方法可以使DataGridView
的当前单元格在您按下Tab
按钮时始终具有虚线边框?我注意到如果你曾经按过Tab
按钮一次,那么当前的单元格周围总是有边框,但是我想从头开始那边有边框,无需按Tab
按钮。
目前,我以编程方式发送Tab键,如下所示:
SendKeys.Send("{TAB}");
但这很糟糕,如果有空的话,我宁愿找到合适的解决方案。
修改
我忘了提及SelectionMode
设置为FullRowSelect
而且我不想改变这一点。我希望边框轮廓只围绕当前单元格以及整个行被突出显示。
答案 0 :(得分:3)
创建一个新类以继承DataGridView
并覆盖ShowFocusCues
属性 - 将True
返回始终显示焦点矩形或False
从不显示它。如果你想随心所欲地改变它,你甚至可以添加一个公共属性来公开它。
public class DataGridViewFocused : DataGridView
{
public bool ShowFocus { get; set; }
protected override bool ShowFocusCues
{
get
{
return this.ShowFocus;
}
}
}
DataGridViewFocused dataGridView1 = new DataGridViewFocused();
dataGridView1.ShowFocus = true;
注意:这只会集中CurrentCell
,因为它的行为方式就是这样。因此,即使设置了FullRowSelect
,也只会突出显示突出显示的行中的一个选定单元格。
答案 1 :(得分:1)
这种行为似乎是在Windows窗体中硬编码的。我认为你无法找到更好的编码方式。
我建议你提出的一个建议是处理DataGridView.CellPainting
事件并手动绘制边框。然后,您将能够使用所需的样式绘制边框,以便当前单元格对于用户而言比使用“TAB”方法更加明显。以下是带有红色虚线边框的示例:
private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
if (dataGridView1.CurrentCell != null && e.RowIndex != -1 && e.ColumnIndex != -1 &&
dataGridView1.CurrentCell.RowIndex == e.RowIndex &&
dataGridView1.CurrentCell.ColumnIndex == e.ColumnIndex)
{
e.Paint(e.ClipBounds, e.PaintParts);
var pen = new Pen(Color.Red) { DashStyle = DashStyle.Dash };
var rect = new Rectangle(e.CellBounds.Left, e.CellBounds.Top, e.CellBounds.Width - 2, e.CellBounds.Height - 2);
e.Graphics.DrawRectangle(pen, rect);
e.Handled = true;
}
}