2010-07-04 100 views
1

我有一个文本框单元格的列需要有水印文本DataGridView。我也有一个使用的DllImport的水印具有的IntPtr的HWND添加到使用SendMessage函数一个TextBox作为参数之一,这样一个静态类:从DataGridViewTextBoxCell获取句柄IntPtr?

public static void SetWatermark(TextBox textBox, string watermarkText) 
    { 
     SendMessage(textBox.Handle, EM_SETCUEBANNER, 0, watermarkText); 
    } 

问题是,当文本框继承Control.Handle财产, DataGridViewTextBoxCell没有,所以我无法获得IntPtr参数。这是我的理解,该单元格使用TextBox控件来编辑值,所以不应该有某种方法来处理该句柄?

我使用.NET 2.0和C#

回答

2

如果你想当前正在编辑的文本框的单元格的引用,您可以使用在DataGridView本身DataGridView.EditingControl财产。将代码放入EditingControlShowing事件的处理程序中,以便在显示新的TextBox时调用它。

当然,由于正在编辑的单元格具有键盘焦点,因此实际上需要未编辑单元格上的水印,因此无论如何都会隐藏水印。未编辑的单元格没有窗口句柄,并且完全用托管代码绘制,所以您无法使用SendMessage执行此操作。您需要创建DataGridViewCell的子类并覆盖Paint或处理DataGridView上的CellPainting事件。