[英]Calling a KeyDown Event on Form Load
我想在Form_Load
上啟動KeyDown
事件,但它會將我帶到Form_Load
事件中的其他地方。
Form_Load:
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
的 SUM,它是 30。但是,在調試之后,我得到了它的初始化值 0。據我somegeneratednumber
,在SendKeys.Send("{Enter}")
, KeyDown
事件應該繼續。
為什么不是??
我將如何得到正確的結果? 我真的應該在Form_Load
上執行KeyDown
事件,這是一個條件事件......
或者我在這里做錯了什么?
注意:原來 static_int 是在一個類上初始化的
不, KeyDown
甚至會在最早的時刻進行,也就是從表單的消息隊列中執行適當的消息時。 這不會在Load
事件完成之前發生,因為這也在消息隊列中。 即使情況並非如此, SendKeys
也不會等待處理操作。 它只是發送消息並立即返回。
另一個問題是SendKeys
將虛擬鍵發送到當前活動窗口。 那永遠不可能是您的窗口,因為您的窗口甚至還沒有顯示! 當某些事情表現得很奇怪時,一個好的第一步是閱讀文檔。
那么,為什么static_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}");
}
但這個設計確實是錯誤的
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.