C# 在表单加载时调用KeyDown事件
我想在C# 在表单加载时调用KeyDown事件,c#,events,C#,Events,我想在Form\u Load上启动一个KeyDown事件,但是它会把我带到Form\u Load事件中的其他地方 表格(u)负荷: int static_int = 0; private void Form1_Load(object sender, EventArgs e) { if(condition == true) { txtInput.Text = "something"; txtInput.Focus(); SendKey
Form\u Load
上启动一个KeyDown
事件,但是它会把我带到Form\u Load
事件中的其他地方
表格(u)负荷:
int static_int = 0;
private void Form1_Load(object sender, EventArgs e)
{
if(condition == true)
{
txtInput.Text = "something";
txtInput.Focus();
SendKeys.Send("{Enter}");
int somegeneratednubmer = 20;
static_int = static_int + somegeneratednumber;
//somemore code here
}
}
向下键:
private void txtInput_KeyDown(object sender, KeyEventArgs e)
{
if(e.KeyCode == Keys.Enter)
{
static_int = 10;
//somemore codes here too
}
我想得到static_int
和somegeneratednumber
的总和,即30。然而,在调试之后,我得到了它的初始化值0。据我所知,在SendKeys.Send({Enter})之后,
按键关闭事件应该继续
为什么不是??如何得到正确的结果?我真的应该在
Form\u Load
上执行KeyDown
事件,这是一个条件事件…或者我做错了什么?
注意:最初静态\u int是在类上初始化的否,
向下键
甚至会在尽可能早的时间进行,也就是从表单的消息队列中执行适当的消息时。在Load
事件完成之前,这是不可能发生的,因为消息队列中也会发生这种情况。即使情况并非如此,SendKeys
也不会等待操作被处理。它只是发送消息并立即返回
另一个问题是SendKeys
将虚拟密钥发送到当前活动的窗口。那永远不会是你的窗口,因为你的窗口甚至还没有显示!当某些行为异常时,好的第一步是阅读文档
那么,为什么static\u int
的值为零,而不是20
或30
?嗯,最有可能的情况是一个未处理的异常,我很确定这正是执行tbxInput.Focus
时发生的情况。该控件还不完全存在,并且无法使其成为输入焦点。如果你在理解这些方面有困难,你可能会想找一些关于Windows如何工作的基础知识的书,而.NET对此无能为力,而在这样的地方,(非常漂亮的).NET抽象会泄露很多东西。如果您计划进行任何Windows UI开发,您确实需要至少了解基础知识
然而,无论如何,这是完全没有必要的。您不必执行
KeyDown
事件。只需创建一个从Load
事件处理程序和KeyDown
事件处理程序调用的方法。尝试添加此事件
Form1尚未加载,因此尚未加载任何事件
private void Form1_Shown(Object sender, EventArgs e)
{
SendKeys.Send("{Enter}");
}
但这种设计确实是错误的