1


0

DataGridViewTextBoxCellからハンドルIntPtrを取得しますか?

透かしテキストを必要とするテキストボックスセルの列を持つDataGridViewがあります。 また、DLLImportを使用して、次のようにパラメーターの1つとしてIntPtr hWndを指定したSendMessageを使用してTextBoxに透かしを追加する静的クラスもあります。

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

問題は、TextBoxがControl.Handleプロパティを継承するのに対し、DataGridViewTextBoxCellは継承しないため、IntPtrパラメーターを取得できないことです。 セルは値を編集するためにTextBoxコントロールを使用するので、そのHandleに到達する方法はないはずだと理解していますか?

1 Answer


2


現在編集中のセルのTextBoxへの参照が必要な場合は、http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.editingcontrol.aspx [DataGridView.EditingControlを使用できます] DataGridView自体のプロパティ。 新しいTextBoxが表示されるたびに呼び出されるように、http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.editingcontrolshowing.aspx [EditingControlShowing]イベントのハンドラーにコードを配置します。 。

もちろん、編集中のセルにはキーボードフォーカスがあるため、透かしはとにかく非表示になるため、編集されていないセルには実際に透かしが必要です。 編集されていないセルにはウィンドウハンドルがなく、マネージコードで完全にペイントされるため、SendMessageでこれを行うことはできません。 DataGridViewCellのサブクラスを作成し、http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewcell.paint.aspx [Paint]をオーバーライドするか、http:// msdnを処理する必要があります。 DataGridViewのmicrosoft.com/en-us/library/system.windows.forms.datagridview.cellpainting.aspx[CellPainting]イベント。