在VB .NET中,我有3个字符,根据一些计算添加到DataGridView单元格中。
它们是等级变化箭头并且工作正常,但我希望向上箭头为绿色,向下箭头为红色。
Dim strup As String = "▲"
Dim strdown As String = "▼"
Dim strsame As String = "▬"
因此在单元格中,负3的变化看起来像▼3,加3看起来像▲3,其中文本和符号是不同的颜色。
如何更改DataGridView单元格中第一个字符的颜色?
答案 0 :(得分:2)
没有简单的方法可以做到这一点,如果你不仅仅是单元格中有问题的角色(你需要做某种形式的自定义绘画)。
如果您只有这些字符,那么使用CellFormatting事件非常容易:
void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
e.CellStyle.Font = new Font("Arial Unicode MS", 12);
if (dataGridView1.Columns[e.ColumnIndex].Name == "CorrectColumnName")
{
if (e.Value == "▲")
e.CellStyle.ForeColor = Color.Green;
else if (e.Value == "▼")
e.CellStyle.ForeColor = Color.Red;
else
e.CellStyle.ForeColor = Color.Black;
}
}
如果你想在同一个单元格中想要不同的颜色,那么需要类似下面的代码(这会处理CellPainting事件):
void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
if (e.ColumnIndex == -1 || e.RowIndex == -1)
return;
if (dataGridView1.Columns[e.ColumnIndex].Name == "CorrectColumnName")
{
e.Paint(e.CellBounds, DataGridViewPaintParts.All & ~DataGridViewPaintParts.ContentForeground);
if (e.FormattedValue.ToString().StartsWith("▲", StringComparison.InvariantCulture))
{
RenderCellText(Color.Green, e);
}
else if (e.FormattedValue == "▼")
{
RenderCellText(Color.Red, e);
}
else
RenderCellText(SystemColors.WindowText, e);
e.Handled = true;
}
}
private void RenderCellText(Color color, DataGridViewCellPaintingEventArgs e)
{
string text = e.FormattedValue.ToString();
string beginning = text.Substring(0, 1);
string end = text.Substring(1);
Point topLeft = new Point(e.CellBounds.X, e.CellBounds.Y + (e.CellBounds.Height / 4));
TextRenderer.DrawText(e.Graphics, beginning, this.dataGridView1.Font, topLeft, color);
Size s = TextRenderer.MeasureText(beginning, this.dataGridView1.Font);
Point p = new Point(topLeft.X + s.Width, topLeft.Y);
TextRenderer.DrawText(e.Graphics, end, this.dataGridView1.Font, p, SystemColors.WindowText);
}
答案 1 :(得分:0)
我做了类似的事情,最后将这些字符放在他们自己的专栏中。