Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在表单加载时调用KeyDown事件_C#_Events - Fatal编程技术网

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}");
}
但这种设计确实是错误的