Я пытаюсь сделать программу WinForms такой, чтобы TextBox обычно скрывался (Visible = false), пока пользователь не начнет печатать на клавиатуре, после чего TextBox должен стать видимым, а ввод с клавиатуры должен перейти в TextBox .
Вот программа, сведенная к основным частям:
using System.Windows.Forms;
namespace TestTextEditPopup
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.KeyPreview = true;
textBox1.Visible = false;
}
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData != Keys.Escape)
return base.ProcessCmdKey(ref msg, keyData);
textBox1.Visible = false;
return true; // Key has been processed
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
textBox1.Visible = true;
textBox1.Focus();
}
}
}
А вот и серия снимков экрана:
Сначала я нажал "а" на клавиатуре. Это приводит к тому, что TextBox становится видимым и получает фокус, но «a» где-то потеряно.
Тогда я нажал Esc. Это правильно делает TextBox снова невидимым.
Тогда я нажал "b". На этот раз (и для всех, или, по крайней мере, почти для всех последующих) это работает - TextBox становится видимым, получает фокус, а ввод с клавиатуры не теряется - он отображается в TextBox.
Есть предложения, почему это не работает с первого раза? Или альтернативные методы выполнения того, что я пытаюсь сделать?
Спасибо.
Редактировать: просто добавив KeyPress в качестве дополнительного тега.