C# 从DataGridViewTextBoxCell获取句柄IntPtr?
我有一个DataGridView,其中包含一列需要水印文本的文本框单元格。我还有一个静态类,它使用DLLImport将水印添加到文本框中,使用SendMessage将IntPtr hWnd作为参数之一,如下所示:C# 从DataGridViewTextBoxCell获取句柄IntPtr?,c#,datagridview,controls,winforms-interop,C#,Datagridview,Controls,Winforms Interop,我有一个DataGridView,其中包含一列需要水印文本的文本框单元格。我还有一个静态类,它使用DLLImport将水印添加到文本框中,使用SendMessage将IntPtr hWnd作为参数之一,如下所示: public static void SetWatermark(TextBox textBox, string watermarkText) { SendMessage(textBox.Handle, EM_SETCUEBANNER, 0, watermarkT
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 35;如果要引用当前正在编辑的单元格的文本框,可以使用DataGridView本身的属性。将代码放入事件的处理程序中,以便在显示新文本框时调用它 当然,您实际上希望水印位于未被编辑的单元格上,因为正在编辑的单元格具有键盘焦点,因此水印将被隐藏。未被编辑的单元格没有窗口句柄,并且完全在托管代码中绘制,因此无法使用SendMessage执行此操作。您需要创建DataGridViewCell的子类,并重写或处理DataGridView上的事件