Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从DataGridViewTextBoxCell获取句柄IntPtr?_C#_Datagridview_Controls_Winforms Interop - Fatal编程技术网

C# 从DataGridViewTextBoxCell获取句柄IntPtr?

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

我有一个DataGridView,其中包含一列需要水印文本的文本框单元格。我还有一个静态类,它使用DLLImport将水印添加到文本框中,使用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 35;

如果要引用当前正在编辑的单元格的文本框,可以使用DataGridView本身的属性。将代码放入事件的处理程序中,以便在显示新文本框时调用它

当然,您实际上希望水印位于未被编辑的单元格上,因为正在编辑的单元格具有键盘焦点,因此水印将被隐藏。未被编辑的单元格没有窗口句柄,并且完全在托管代码中绘制,因此无法使用SendMessage执行此操作。您需要创建DataGridViewCell的子类,并重写或处理DataGridView上的事件