WINFROM 的挑战!WINFROM datagridview 的问题,希望高手来解决,急!!!!!!!!
WINFROM datagridview中设置单元格中某个字的颜色,我能做到,参照的是:http://hi.baidu.com/xiangboren/blog/item/1bbf9fd422ebc50ca08bb7b5.html/cmtid/7f213a73af381d128601b0a3
但是只要单元格中的内容换行就不行了,我也试图解决,但是一直未果。。。希望高手来啊。。。。。
谢谢大家。。。。 --------------------编程问答-------------------- wo ding !!! --------------------编程问答-------------------- 无代码,无真相。 --------------------编程问答-------------------- 我顶啊。。
代码如下:
输入154,结果
我的这个办法主要通过触发DataGridView的CellPainting事件来进行重绘制,要做的就两步:
1. 确定你要重绘的单元格
这个嘛,要根据具体的显示需求来定,用逻辑办法确定需要绘制的单元格。
以上面的图片为例,当我向textbox输入数字时,“个人编号”列的单元格突出显示;输入汉字时,“姓名”列的单元格突出显示。
2. 重绘单元格
重点说说这里,重绘单元格,两个步骤:
a. 计算
由于有DataGridViewCellPaintingEventArgs的便利,单元格的坐标等信息都不需要计算,要计算的只单元格内容的位置和其关键字的位置。
string cellword = (string)e.Value; // 单元格原文本
string keyword = textBox1.Text.Trim(); // 关键字
// ***计算绘制位置***
Rectangle keywordBound = e.CellBounds; //关键字区域,默认定义为单元格大小
Rectangle valueBound = e.CellBounds; //单元格内容区域,默认定义为单元格大小
float fontSizeWeight = 96 / (72 / e.CellStyle.Font.Size); // 字体实际像素宽度
float fontSizeHeight = 96 / (72 / e.CellStyle.Font.Size); // 字体实际像素高度
if (IsChinese()) //是否汉字,是则字体宽度乘2
fontSizeWeight = fontSizeWeight * 2;
else
fontSizeWeight;
// 关键字的坐标
keywordBound.X += cellword.Substring(0, cellword.IndexOf(keyword)).Length * (int)(fontSizeWeight / 2);
keywordBound.Y += (e.CellBounds.Height - (int)fontSizeHeight) / 2;
// 原文本的Y坐标
valueBound.Y = keywordBound.Y;
b. 绘制
绘制按照一层层地绘制,背景->原文字->关键字。
.NET给我们提供了方便的PaintBackground函数,其作用就是绘制单元格背景。
只要计算好文字绘制的位置,使用Graphics.DrawString函数也能方便地绘制,达到效果
// ***绘制***
using (Brush foreColorBrush = new SolidBrush(e.CellStyle.ForeColor), keywordColorBrush = new SolidBrush(Color.Red))
{
// 绘制背景
e.PaintBackground(e.ClipBounds, false);
// 绘制背景(被选中时)
if (e.State == (DataGridViewElementStates.Selected | DataGridViewElementStates.Displayed | DataGridViewElementStates.Visible))
e.PaintBackground(e.ClipBounds, true);
// 绘制原文本
e.Graphics.DrawString(cellword, e.CellStyle.Font, foreColorBrush, valueBound, StringFormat.GenericDefault);
// 在原文本上绘制红色关键字
e.Graphics.DrawString(keyword, e.CellStyle.Font, keywordColorBrush, keywordBound, StringFormat.GenericDefault);
// 已完成事件处理,继续本身处理
e.Handled = true;
--------------------编程问答-------------------- 定 ! --------------------编程问答-------------------- ding!
补充:.NET技术 , C#