C# 从禁用的文本框中删除焦点矩形

C# 从禁用的文本框中删除焦点矩形,c#,.net,winforms,textbox,desktop-application,C#,.net,Winforms,Textbox,Desktop Application,我的场景是有一个表单,有三个文本框和一个按钮。单击按钮可设置textBox1.Enabled=false、textBox2.Enabled=false和textBox3.Focus() 我遇到的问题是,如果textBox1或textBox2在用户单击按钮时具有焦点,则文本框将变为禁用状态,但会保留焦点矩形的灰色版本。这就像表单没有重新绘制禁用的文本框一样。请注意随附的屏幕截图,并注意第一个和第二个文本框之间的差异 如何确保将焦点移到textBox3并去掉textBox1周围的焦点矩形?我不确定

我的场景是有一个表单,有三个文本框和一个按钮。单击按钮可设置textBox1.Enabled=false、textBox2.Enabled=false和textBox3.Focus()

我遇到的问题是,如果textBox1或textBox2在用户单击按钮时具有焦点,则文本框将变为禁用状态,但会保留焦点矩形的灰色版本。这就像表单没有重新绘制禁用的文本框一样。请注意随附的屏幕截图,并注意第一个和第二个文本框之间的差异


如何确保将焦点移到textBox3并去掉textBox1周围的焦点矩形?

我不确定这种行为是否是一个bug,但我找到了处理它的方法。诀窍是使用BorderStyle属性

private void button1_Click(object sender, EventArgs e)
{
    textBox3.Focus();
    var borderStyle = textBox1.BorderStyle;
    textBox1.BorderStyle = BorderStyle.None;
    textBox2.BorderStyle = BorderStyle.None;
    textBox1.Enabled = false;
    textBox2.Enabled = false;
    textBox1.BorderStyle = borderStyle;
    textBox2.BorderStyle = borderStyle;
    textBox1.Refresh();
}

我不确定这种行为是否是一个bug,但我找到了处理它的方法。诀窍是使用BorderStyle属性

private void button1_Click(object sender, EventArgs e)
{
    textBox3.Focus();
    var borderStyle = textBox1.BorderStyle;
    textBox1.BorderStyle = BorderStyle.None;
    textBox2.BorderStyle = BorderStyle.None;
    textBox1.Enabled = false;
    textBox2.Enabled = false;
    textBox1.BorderStyle = borderStyle;
    textBox2.BorderStyle = borderStyle;
    textBox1.Refresh();
}

非常感谢。这是有帮助的,但感觉有点粗糙。如果可能的话,我想为这个问题找到一个合适的解决方案。在我看来,在Win Forms世界中,在点击按钮时禁用文本框应该是一项常见的功能。我觉得很难相信这样一个bug会经得起时间的考验…谢谢。这是有帮助的,但感觉有点粗糙。如果可能的话,我想为这个问题找到一个合适的解决方案。在我看来,在Win Forms世界中,在点击按钮时禁用文本框应该是一项常见的功能。我发现很难相信这样一个虫子会经得起时间的考验……一个又一个的重复