C# 有一些乐趣-什么是一个很好的方式,包括一个秘密的关键功能和火灾的KeyDown事件?
为了保持自己的兴趣,我尝试在我的项目中放一些复活节彩蛋(主要是为了娱乐自己)。我看过一些网站,在那里你可以输入一系列字母“aswzaswz”,你会得到一个“秘密函数”——我如何在C#中实现这一点 我过去使用修改键分配过一个“秘密函数”C# 有一些乐趣-什么是一个很好的方式,包括一个秘密的关键功能和火灾的KeyDown事件?,c#,.net,winforms,C#,.net,Winforms,为了保持自己的兴趣,我尝试在我的项目中放一些复活节彩蛋(主要是为了娱乐自己)。我看过一些网站,在那里你可以输入一系列字母“aswzaswz”,你会得到一个“秘密函数”——我如何在C#中实现这一点 我过去使用修改键分配过一个“秘密函数” bool showFunThing = (Control.ModifierKeys & Keys.Control) == Keys.Control; 但是我想变得更隐秘一点(没有修改键),我只想表单能够检测到在没有任何输入的情况下键入的某
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;
}
谢谢大家 您正在重写虚拟方法,因此不需要处理KeyDown事件。如果进行调试,如果有东西调用虚拟方法,则应该在重写的方法中命中断点
但是,您确定要在正确的类中重写正确的方法吗?只是想一想。您正在重写一个虚拟方法,因此不需要处理KeyDown事件。如果进行调试,如果有东西调用虚拟方法,则应该在重写的方法中命中断点 但是,您确定要在正确的类中重写正确的方法吗?只是想一想。试试这个:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == (Keys.P|Keys.Control))
{
//do my prank
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}
当您按CTRL+p时,将触发此命令
参考:
在消息预处理期间调用此方法来处理命令
钥匙。命令键是始终优先于常规键的键
输入键。命令键的示例包括加速器和菜单
捷径。该方法必须返回true以指示它已
已处理命令键
试试这个:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == (Keys.P|Keys.Control))
{
//do my prank
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}
当您按CTRL+p时,将触发此命令
参考:
在消息预处理期间调用此方法来处理命令
钥匙。命令键是始终优先于常规键的键
输入键。命令键的示例包括加速器和菜单
捷径。该方法必须返回true以指示它已
已处理命令键
我做了一个小测试,但它从来没有发射。。。这就是为什么我认为我需要表单设计器中的位…我做了一个小测试,但它从未启动。。。这就是为什么我认为我需要表单设计器中的位。。。