2010-07-04 103 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事件。