+-
重写DataGridViewTextBoxCell绘画方法
我试图在派生类中重写DataGridViewTextBoxCell的paint方法,以便可以将前景文本缩进一些可变的像素.如果列的宽度进行调整,以使其总宽度为我的单元格文本的长度加上“缓冲区”缩进量,则我想这样做.有人知道实现此目标的方法吗?我la脚的实现如下:

public class MyTextBoxCell : DataGridViewTextBoxCell{ ....
        protected override void Paint(Graphics graphics, Rectangle clipBounds, Rectangle cellBounds, int rowIndex, DataGridViewElementStates cellState, object value, object formattedValue, string errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts) {
           clipBounds.Inflate(100, 0);

            DataGridViewPaintParts pp = DataGridViewPaintParts.Background | DataGridViewPaintParts.Border | DataGridViewPaintParts.ContentBackground
                | DataGridViewPaintParts.ErrorIcon;
            base.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState, value, formattedValue, errorText, cellStyle, advancedBorderStyle, pp);            

                string text = formattedValue as string;

//My lame attempt to indent 20 pixels??
                TextRenderer.DrawText(graphics, text, cellStyle.Font, new Point(cellBounds.Location.X + 20, cellBounds.Location.Y), cellStyle.SelectionForeColor ,TextFormatFlags.EndEllipsis);

}

}

最佳答案
如果您尝试自动调整列的大小(取决于单元格内容的大小),则应查看Column.AutoSizeMode属性和Column.DefaultCellStyle属性.

static const int INDENTCOEFF = 5;
DataGridViewCellStyle cellStyle = new DataGridViewCellStyle();

cellStyle.Padding = 
         new Padding(INDENTCOEFF , 5, INDENTCOEFF , 5); //left,top,right,bottom
MyColumn.DefaultCellStyle = cellStyle;
MyColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
点击查看更多相关文章

转载注明原文:重写DataGridViewTextBoxCell绘画方法 - 乐贴网