EM_SETCUEBANNER sendmessage vb.net usercontrol не работает

Если я использую код, показанный ниже, на vb.net winform, появляется баннер / водяной знак cue и он ведет себя так, как ожидалось (Win7 Pro 32-битная VS2008 и 64-битная VS2010). Однако при использовании того же стиля кода в пользовательском элементе управления vb.net водяной знак не отображается. У кого-нибудь есть подсказки?

Несколько часов спустя... Это похоже на PEBKAC. Работает в тестовом приложении. с пользовательскими элементами управления. И те, которые созданы во время разработки, и те, которые загружены во время выполнения, по-прежнему не работают в основном приложении. хотя. Все еще озадачен. Все еще ищу подсказку.

' Call from form / usercontrol load event handler.
Userhint.WatermarkSet(textbox1, "Some arbitrary text.")

' Noddy library class.
Friend Class Userhint

<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)>_
Private Shared Function SendMessage(ByVal hWnd As HandleRef, _
                                    ByVal Msg As UInteger, _
                                    ByVal wParam As IntPtr, _
                                    ByVal lParam As String) As IntPtr
End Function

Public Shared Sub WatermarkSet(ByVal ctl As Control, _
                               byval hintText as string)

  const EM_SETCUEBANNER as int32 = &h1501
  dim retainOnFocus As IntPtr = new IntPtr(1)

  SendMessage(New HandleRef(ctl, ctl.Handle), _
              EM_SETCUEBANNER, _
              retainOnFocus, _
              hintText)

End sub

End Class

person Community    schedule 24.11.2012    source источник


Ответы (1)


Не столько PEBKAC, сколько еще один пример M$, который не документирует вещи так хорошо, как мог бы.

Короткий ответ — вызвать Application.EnableVisualStyles() перед методом Run.

Application.EnableVisualStyles()
Application.Run()

См. вопросы/7518894/sendmessage-doesnt-work-in-one-project на этом сайте для получения дополнительной информации.

person Community    schedule 01.12.2012