禁用所有控件並重新啓用它們後,焦點矩形和文本框脫字符將丟失(vs2012/.NET Framework v4.5)。禁用所有控件後,WinForms窗體部分失去焦點
要重現此問題,只需創建一個WinForms應用程序項目,添加一個按鈕,並在窗體的文本框,然後使用這個代碼在按鈕單擊事件禁用和啓用兩個控件:
private void button1_Click(object sender, EventArgs e)
{
button1.Enabled = false;
textBox1.Enabled = false;
button1.Enabled = true;
textBox1.Enabled = true;
}
你可能會按預期方式使用Tab/Shift + Tab在文本框和按鈕之間循環,直到您按下按鈕。
之後,焦點部分丟失(奇怪)。您仍然可以使用Tab/Shift + Tab和箭頭在控件之間混淆,然後按Enter鍵以激活該按鈕,但無法輸入文本框,也不能使用空格鍵按下按鈕。文本框脫字符號和按鈕焦點矩形不再顯示。將焦點轉移到另一個應用程序,然後返回到此表單將解決焦點問題。
如果您未禁用至少一個能夠獲得焦點的控件,則不會發生此問題。另外,焦點行爲被禁用和重新啓用的形式,這樣的恢復:
private void button1_Click(object sender, EventArgs e)
{
button1.Enabled = false;
textBox1.Enabled = false;
button1.Enabled = true;
textBox1.Enabled = true;
this.Enabled = false;
this.Enabled = true;
}
我試圖禁用在任務開始更復雜形式的所有控件,所以任務將再次啓用完成後的所有控件,以防止在處理期間用戶輸入,但不鎖定UI線程。我認爲它與跨線程調用調用有關,但我發現即使在UI線程上運行所有代碼也會發生此問題。
這是完全正常的。 –
沒關係,我發現只是調用this.Focus()後啓用控件修復問題。 –