Насколько я могу судить, это ошибка в том, как система отображает отключенное состояние элемента управления. Я создал следующий код для моделирования этой проблемы. Код немного многословен, но я сделал его так, чтобы легко понять логический поток.
Я создал форму с:
4 текстовых поля с именами txtBox1, txtBox2, txtBox3 и txtBox4
4 флажка с именами chkBox1, chkBox2, chkBox3 и chkBox4
Установите для свойства Enabled каждого текстового поля значение False (я сделал это во время разработки)
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;