2017-02-10 3 views
0

나는 Watermark TextBox in WinForms의 코드를 발견하지만 C# 버전, 그래서워터 마크 TextBox를 만드는 방법은 무엇입니까?

오류는이 라인에서 발생 ...... 나는 VB 버전에 코드를 변환하는 http://converter.telerik.com/를 사용하지만, 난 여전히 오류 얻을 : -

sendMessage 첨부 (Me.Handle, & H1501, DirectCast (1, IntPtr입니다), mCue는)

나는 그것을 어떻게 해결할 수 있습니까?

오류 메시지 : BC30311 'Integer'유형의 값을 'IntPtr'로 변환 할 수 없습니다.

Imports System.ComponentModel 
Imports System.Windows.Forms 
Imports System.Runtime.InteropServices 

Class CueTextBox 
    Inherits TextBox 
    <Localizable(True)> _ 
    Public Property Cue() As String 
     Get 
      Return mCue 
     End Get 
     Set 
      mCue = value 
      updateCue() 
     End Set 
    End Property 

    Private Sub updateCue() 
     If Me.IsHandleCreated AndAlso mCue IsNot Nothing Then 
      SendMessage(Me.Handle, &H1501, DirectCast(1, IntPtr), mCue) 'this line get the error msg 
     End If 
    End Sub 
    Protected Overrides Sub OnHandleCreated(e As EventArgs) 
     MyBase.OnHandleCreated(e) 
     updateCue() 
    End Sub 
    Private mCue As String 

    ' PInvoke 
    <DllImport("user32.dll", CharSet := CharSet.Unicode)> _ 
    Private Shared Function SendMessage(hWnd As IntPtr, msg As Integer, wp As IntPtr, lp As String) As IntPtr 
    End Function 
End Class 

답변

1

PInvoke.net에 따르면 SendMessage에 대한 VB.Net의 오른쪽 서명은 다음과 같습니다

SendMessage(Me.Handle, &H1501, DirectCast(1, IntPtr), mCue) 

시도가 교체 :

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

어쨌든, 문제는이 라인에 기준 :

SendMessage(Me.Handle, &H1501, New IntPtr(1)), mCue) 
+0

감사합니다. 문제가 해결되었습니다. – vbnewbie