Я, как правило, парень VB, но мне кажется, что это работает как демонстрационный код, используя саму форму в качестве источника ввода:
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
private bool _keyHeld;
public Form1()
{
InitializeComponent();
this.KeyUp += new KeyEventHandler(Form1_KeyUp);
this.KeyDown += new KeyEventHandler(Form1_KeyDown);
this._keyHeld = false;
}
void Form1_KeyUp(object sender, KeyEventArgs e)
{
this._keyHeld = false;
}
void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (!this._keyHeld)
{
this._keyHeld = true;
if (this.BackColor == Control.DefaultBackColor)
{
this.BackColor = Color.Red;
}
else
{
this.BackColor = Control.DefaultBackColor;
}
}
else
{
e.Handled = true;
}
}
}
}
Я думаю, что логика становится немного схематичной, если вы одновременно удерживаете несколько клавиш, но, похоже, это вызывает событие только с последней нажатой клавиши, так что я не думаю, что это становится проблемой .
Я проверял это в TextBox в VB, и он работал нормально. Я не был уверен в соглашениях о наследовании, которым я должен следовать в c #, поэтому я оставил его в виде прямой формы для этого ответа.
Извиняюсь за грубые ошибки форматирования кода, опять же, это не мой обычный язык.