我有一个包含一列文本框单元格的DataGridView,它需要有水印文本。我还有一个静态类,它使用DLLImport将水印添加到TextBox,使用SendMessage并将IntPtr hWnd作为参数之一,如下所示:
public static void SetWatermark(TextBox textBox, string watermarkText)
{
SendMessage(textBox.Handle, EM_SETCUEBANNER, 0, watermarkText);
}问题是,虽然TextBox继承了Control.Handle属性,但DataGridViewTextBoxCell没有,所以我无法获取IntPtr参数。据我所知,该单元格使用TextBox控件来编辑值,所以不是应该有某种方法来访问该句柄吗?
我使用的是.NET 2.0和C#
发布于 2010-07-04 22:14:44
如果要引用当前正在编辑的单元格的TextBox,可以使用DataGridView本身的DataGridView.EditingControl属性。将代码放在EditingControlShowing事件的处理程序中,以便每当显示新的TextBox时都会调用它。
当然,您实际上希望在未被编辑的单元格上添加水印,因为正在编辑的单元格具有键盘焦点,所以水印无论如何都会被隐藏。未被编辑的单元格没有窗口句柄,并且完全是在托管代码中绘制的,因此不能使用SendMessage执行此操作。您将需要创建DataGridViewCell的子类并覆盖Paint或处理DataGridView上的CellPainting事件。
https://stackoverflow.com/questions/3173712
复制相似问题