Я делаю приложение в 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
все текстовые поля. Но если я запускаю свое приложение, оно не применяется к заполнителям, оно просто фокусируется на последнем текстовом поле.
Что я делаю неправильно? У меня нет ошибок.
Работает отлично для меня, у вас есть автогенерированное приложение Application.EnableVisualStyles() в вашем main()? –
О, вот в чем проблема, чего у меня не было. Я начал с пустой Program.cs, поэтому у меня не было этой строки. Благодаря! :) –