據我所知,這是系統呈現控件禁用狀態的一種錯誤。我創建了下面的代碼來模擬這個問題。代碼有點冗長,但爲了方便理解邏輯流程,我這樣做了。
我創建了一個形式,:命名txtBox1,txtBox2,txtBox3和txtBox4 (我這樣做是4個選框命名chkBox1,chkBox2,chkBox3和chkBox4
設置每個文本框爲False Enabled屬性 4文本框在設計時)
private void Form1_Load(object sender, EventArgs e) {
chkBox1.CheckedChanged += chkBox_CheckedChanged;
chkBox2.CheckedChanged += chkBox_CheckedChanged;
chkBox3.CheckedChanged += chkBox_CheckedChanged;
chkBox4.CheckedChanged += chkBox_CheckedChanged;
}
private void chkBox_CheckedChanged(object sender, EventArgs e) {
var chkBox = ((CheckBox)sender);
var controlSet = chkBox.Name.Substring(6,1);
var txtName = "txtBox" + controlSet;
foreach (var txtBox in Controls.Cast<object>().Where(ctl => ((Control)ctl).Name == txtName).Select(ctl => ((TextBox)ctl))) {
if (chkBox.Checked) {
txtBox.Enabled = true;
txtBox.Focus();
}
else {
//The checkbox stole the focuse when it was clicked, so no need to change.
txtBox.Enabled = false;
}
}
}
現在,如果你執行這個代碼,你可以檢查複選框,使文本具有相同名稱的前綴(1,2,3或4)。這也將重點放在文本框上。現在,如果您禁用具有焦點的文本框,則其顯示的內容與其他禁用的文本框不同。
我試過各種刷新,失效等等。關於控件和表單本身無濟於事。
UPDATE
所以我發現,似乎工作黑客攻擊。如果在禁用之前將文本框的邊框樣式設置爲「無」,然後重置,則奇怪的輪廓效果不會發生。
var borderStyle = txtBox.BorderStyle;
txtBox.BorderStyle = BorderStyle.None;
txtBox.Enabled = false;
txtBox.BorderStyle = borderStyle;
您是否檢查過所有複選框的屬性相同,並且其中一個沒有不同的樣式或其他東西? – Chris
也許我沒有解釋得很好 - 它發生在所有TextBoxes上 - 在禁用之前已經關注的TextBox中(也都是使用相同的屬性創建的 - 只有例外的是具有密碼char的傳遞TextBoxes)。當我禁用用戶文本框的自動對焦並且用戶不單擊以對其進行對焦/輸入時,CheckBox在禁用時不會更改邊框。這就是爲什麼我認爲這是一個焦點問題。但後來我添加了一個測試TextBox tbTest,並做了tbTest.Focus();然後禁用2個文本框但仍然得到相同的結果。 – n1tr0
啊,我明白你的意思了,是的,我誤解了它,因爲一個特定的複選框導致了問題。 :( – Chris