1

透かしテキストが必要なテキストボックスセルの列を持つ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コントロールを使用して値を編集していることを理解しているので、そのハンドルに到達する方法はないでしょうか。

.NET 2.0とC#を使用しています

4

1 に答える 1

2

現在編集中のセルのTextBoxへの参照が必要な場合は、DataGridView自体のDataGridView.EditingControlプロパティを使用できます。新しいTextBoxが表示されるたびに呼び出されるよう に、コードをEditingControlShowingイベントのハンドラーに配置します。

もちろん、編集中のセルにはキーボードフォーカスがあり、透かしはとにかく非表示になるため、実際には編集されていないセルに透かしが必要です。編集されていないセルにはウィンドウハンドルがなく、完全にマネージコードで描画されるため、SendMessageでこれを行うことはできません。DataGridViewCellのサブクラスを作成し、Paintをオーバーライドするか、DataGridViewでCellPaintingイベントを 処理する必要があります。

于 2010-07-04T14:14:44.033 に答える