Получить дескриптор IntPtr из DataGridViewTextBoxCell? - PullRequest
1 голос
/ 04 июля 2010

У меня есть DataGridView со столбцом ячеек текстового поля, который должен иметь текст водяного знака.У меня также есть статический класс, который использует DLLImport для добавления водяного знака в TextBox, используя SendMessage с IntWtr 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 #

1 Ответ

2 голосов
/ 04 июля 2010

Если вам нужна ссылка на TextBox для редактируемой ячейки, вы можете использовать свойство DataGridView.EditingControl в самом DataGridView. Поместите свой код в обработчик для события EditingControlShowing , чтобы оно вызывалось при каждом отображении нового TextBox.

Конечно, вам действительно нужен водяной знак на ячейках, которые не редактируются, поскольку редактируемая ячейка имеет фокус клавиатуры, поэтому водяной знак в любом случае будет скрыт. Ячейки, которые не редактируются, не имеют оконных дескрипторов и окрашиваются полностью в управляемом коде, поэтому вы не можете сделать это с помощью SendMessage. Вам нужно будет создать подкласс DataGridViewCell и переопределить Paint или обработать событие CellPainting в DataGridView.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...