1

vb.net winform で以下に示すコードを使用すると、キュー バナー/透かしが表示され、期待どおりに動作します (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
4

1 に答える 1

2

PEBKAC ではなく、M$ の別のインスタンスが、物事を適切に文書化していません。

簡単な答えは、Run メソッドの前に Application.EnableVisualStyles() を呼び出すことです。

Application.EnableVisualStyles()
Application.Run()

詳細については、このサイトの question/7518894/sendmessage-doesnt-work-in-one-project を参照してください。

于 2012-12-01T07:51:47.783 に答える