如何在datagridviewcell上绘制自定义控件?
我想为datagridviewcell
托管一个自定义控件。
我唯一的好参考是http://msdn.microsoft.com/en-us/library/7tas5c80.aspx
但是,我希望单元格显示我自己的用户控件
public class CustomCell : DataGridViewTextBoxCell { protected override void Paint(System.Drawing.Graphics graphics, System.Drawing.Rectangle clipBounds, System.Drawing.Rectangle cellBounds, int rowIndex, DataGridViewElementStates cellState, object value, object formattedValue, string errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts) { base.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState, value, formattedValue, errorText, cellStyle, advancedBorderStyle, paintParts); } }
谁能指导我怎么做?
为了节省资源, DataGridView
控件中的单元格大部分时间都处于显示模式,仅在用户使用鼠标或键盘输入单元格时才更改为编辑模式。 你在问题中提到的例子被认为是最佳实践,因为编辑控件(在这种情况下,一个DateTimePicker
,但可能很容易就是你自己的自定义用户控件)只出现在编辑模式下,因此只有一个一次一个细胞。
当单元格不处于编辑模式时,它应使用DataGridViewCell
子类的Paint
方法内的逻辑呈现其值的等效表示。 您可以通过以下几种方式之一完成此操作:
- 只需根据其值将文本或图像绘制到单元格的边界上; 不要试图复制编辑控件的外观。
- 使用
ControlPaint
或VisualStyleRenderer
模拟编辑控件的外观(注意:这涉及许多额外的工作)。 - 将绘制代码从自定义用户控件移动到实用程序类中,以便它和单元格都可以使用相同的绘制代码。
在大多数情况下,第一种选择就足够了; 如果单元格看起来与编辑控件完全相同,则只尝试其他方法之一。