在我的WinForm4.5应用程序中,我有一个以第一列作为链接列的DataGridView。我希望所选链接单元格的链接颜色为白色。由于默认情况下,选定行(或单元格)的背景色为蓝色,所有链接的ForeColor也为蓝色,因此当用户选择一行(或链接单元格)时,链接的文本不可读。我尝试编写以下代码,但它根本不改变所选链接单元格的链接颜色。
private void dataGridView1_SelectionChanged(object sender, EventArgs e)
{
foreach (DataGridViewLinkCell cell in ((DataGridView)sender).SelectedCells)
{
if (cell.ColumnIndex == 0)
{
if (cell.Selected)
{
cell.Style = new DataGridViewCellStyle()
{
SelectionForeColor = SystemColors.HighlightText
};
}
}
}
}然后,我对上面的代码进行了如下修改。但它将所有链接的链接颜色更改为白色--这使得非选定的链接单元格不可读,因为这些链接的背景色也是白色的:
private void dataGridView1_SelectionChanged(object sender, EventArgs e)
{
foreach (DataGridViewLinkCell cell in ((DataGridView)sender).SelectedCells)
{
if (cell.ColumnIndex == 0)
{
if (cell.Selected)
{
cell.LinkColor = SystemColors.HighlightText;
}
}
}
}我通过在foreach循环中设置一个断点和选择一个链接单元来测试这两种代码。我注意到代码确实正确地通过了foreach循环的一次迭代。此外,我没有更改DataGridViewLinkColumn的默认设置。
默认情况下,编辑在行选择上的DataGridView如下所示。请注意,第二列中的单元格将其ForeColor更改为白色,而不是第一列中的单元格:

我希望它在行选择上看起来像这样:

发布于 2014-09-01 05:55:39
编辑当尝试从单元格导航时总是会发生CellLeave事件。
private void dataGridView1_SelectionChanged(object sender, EventArgs e)
{
foreach (DataGridViewLinkCell cell in
((DataGridView) sender).SelectedCells.OfType<DataGridViewLinkCell>())
{
if (cell.Selected)
{
cell.LinkColor = SystemColors.HighlightText;
}
}
}
private void dataGridView1_CellLeave(object sender, DataGridViewCellEventArgs e)
{
foreach (DataGridViewLinkCell cell in
((DataGridView) sender).Rows[e.RowIndex].Cells.OfType<DataGridViewLinkCell>())
{
cell.LinkColor = cell.LinkVisited ? Color.Purple : Color.Blue;
}
}

发布于 2018-10-25 07:45:50
我也经历过同样的问题,我让它使用CellFormatting事件来工作。下面将找到这方面的通用解决方案:
void grd_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
SetGridLinkColor(sender as DataGridView, e.RowIndex, e.ColumnIndex, Color.White);
}
public static void SetGridLinkColor(DataGridView grd, int rowIndex, int columnIndex, Color selectedColor)
{
if (grd == null || !(grd.Columns[columnIndex] is DataGridViewLinkColumn))
return;
if (grd.Rows[rowIndex].Selected)
{
((DataGridViewLinkCell)grd.Rows[rowIndex].Cells[columnIndex]).LinkColor = selectedColor;
((DataGridViewLinkColumn)grd.Columns[columnIndex]).VisitedLinkColor = selectedColor;
}
else
{
Color color = ((DataGridViewLinkColumn)grd.Columns[columnIndex]).LinkColor;
((DataGridViewLinkCell)grd.Rows[rowIndex].Cells[columnIndex]).LinkColor = color;
((DataGridViewLinkColumn)grd.Columns[columnIndex]).VisitedLinkColor = color;
}
}https://stackoverflow.com/questions/25596777
复制相似问题