2016-06-17 10 views
0

Я делаю приложение в C# с окнами. Я хочу иметь место для моих текстовых полей, и я нашел метод SendMessage из User32.dll. Вот мой код (помещенный в LoginForm.cs, который является одной из первых форм, если файл настроек не существует):C# Windows Forms - SendMessage EM_SETCUEBANNER в текстовом поле не работает

private const int EM_SETCUEBANNER = 0x1501;

[DllImport("user32.dll", CharSet = CharSet.Auto)] 
    private static extern Int32 SendMessage(IntPtr hWnd, int msg, int wParam, [MarshalAs(UnmanagedType.LPWStr)]string lParam); 

Устанавливается внутри класса. Как мой конструктор я получил:

public LoginForm() 
{ 
    InitializeComponent(); 

    SendMessage(hostname.Handle, EM_SETCUEBANNER, 0, "Hostname"); 
    SendMessage(port.Handle, EM_SETCUEBANNER, 0, "Port"); 
    SendMessage(username.Handle, EM_SETCUEBANNER, 0, "Username"); 
    SendMessage(password.Handle, EM_SETCUEBANNER, 0, "Password"); 
    SendMessage(database.Handle, EM_SETCUEBANNER, 0, "Database"); 
} 

Мои hostname, port, username, password, database все текстовые поля. Но если я запускаю свое приложение, оно не применяется к заполнителям, оно просто фокусируется на последнем текстовом поле.

Что я делаю неправильно? У меня нет ошибок.

+1

Работает отлично для меня, у вас есть автогенерированное приложение Application.EnableVisualStyles() в вашем main()? –

+1

О, вот в чем проблема, чего у меня не было. Я начал с пустой Program.cs, поэтому у меня не было этой строки. Благодаря! :) –

ответ

-1

Я был немым, я забыл добавить Application.EnableVisualStyles(); в мою Program.cs.