为了让自己保持兴趣,我尝试在我的项目中放一些复活节彩蛋(主要是为了自娱自乐)。我看过一些网站,您可以在其中键入一系列字母“aswzaswz”并获得“秘密功能” - 我将如何在 C# 中实现这一点?
我过去使用修饰键分配了一个“秘密功能”
bool showFunThing = (Control.ModifierKeys & Keys.Control) == Keys.Control;
但想要变得更加隐秘(没有修饰键)我只是想让表单检测没有任何输入的特定单词......我已经构建了一个我认为应该这样做的方法:
private StringBuilder _pressedKeys = new StringBuilder();
protected override void OnKeyDown(KeyEventArgs e)
{
const string kWord = "fun";
char letter = (char)e.KeyValue;
if (!char.IsLetterOrDigit(letter))
{ return; }
_pressedKeys.Append(letter);
if (_pressedKeys.Length == kWord.Length)
{
if (_pressedKeys.ToString().ToLower() == kWord)
{
MessageBox.Show("Fun");
_pressedKeys.Clear();
}
}
base.OnKeyDown(e);
}
现在我需要把它连接起来,但我不知道应该如何在表单设计器中引发事件......我试过这个:
this.KeyDown +=new System.Windows.Forms.KeyEventHandler(OnKeyDown);
以及对此的一些变化,但我遗漏了一些东西,因为它不会触发(或编译)。它告诉我 OnKeyDown 方法需要某个签名,但我还有其他类似的方法,但我没有指定参数。
我担心我可能会让自己感到困惑,所以我向 SO 寻求帮助……有人吗?
编辑: ProcessCmdKey 似乎是与以下工作的方式:
private StringBuilder _pressedKeys = new StringBuilder();
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
const string kWord = "fun";
char letter = (char)keyData;
if (!char.IsLetterOrDigit(letter))
{return true;}
_pressedKeys.Append(letter);
if (_pressedKeys.Length == kWord.Length)
{
if (_pressedKeys.ToString().ToLower() == kWord)
{
MessageBox.Show("Fun");
_pressedKeys.Clear();
}
_pressedKeys.Clear();
}
return true;
}
谢谢大家!