C# winform 文本框背景颜色没有随 if-else 语句改变


我有两个按钮(读取和写入),每个读取和写入有 5 个文本框。 我想比较读取和写入之间的值,如果匹配,文本框将显示绿色,否则显示红色,但当我重新单击读取按钮时,它没有改变颜色

string[] rTextBoxes = { textBox1.Text, textBox2.Text, textBox3.Text, textBox4.Text, textBox5.Text};
string[] wTextBoxes = { textBox15.Text, textBox16.Text, textBox17.Text, textBox18.Text, textBox19.Text};
var totalCount = readTextBoxes.Count();
for (int i = 0; i < totalCount; i++)
{
    if (rTextBoxes[i] != wTextBoxes[i])
    {
        foreach (var control in this.Controls)
        {
            var textBox = control as TextBox;
            if (textBox != null)
            {
                textBox.ReadOnly = false;
            }
        }
        textBox15.BackColor = Color.Red;
        textBox16.BackColor = Color.Red;
        textBox17.BackColor = Color.Red;
        textBox18.BackColor = Color.Red;
        textBox19.BackColor = Color.Red;

    }
    else
    {
        textBox15.BackColor = Color.Green;
        textBox16.BackColor = Color.Green;
        textBox17.BackColor = Color.Green;
        textBox18.BackColor = Color.Green;
        textBox19.BackColor = Color.Green;
    }

}

我尝试过的:

我尝试使用调用方法并将颜色设置为空,但它对颜色更改也没有响应。

if (textBox.InvokeRequired)
{
    textBox.Invoke((MethodInvoker)delegate
    {
        textBox.BackColor = Color.Empty;
    });
}

解决方案1

Invoke 是无关紧要的:仅当您使用主 GUI 线程以外的线程时才需要它。 调用“将代码移回”GUI 线程,以便安全地访问控件。

如果您的颜色没有改变,有多种可能的原因 – 例如,如果 totalCount 为零或负数时,颜色不会改变。
如果无法完整运行您的代码,我们就无法判断 – 而且我们无法做到这一点,因为我们无法访问您的系统。

所以,这将取决于你。
幸运的是,您有一个可用的工具可以帮助您了解正在发生的情况:调试器。 如果您不知道如何使用它,那么快速搜索“Visual Studio 调试器”应该可以为您提供所需的信息。

在函数的第一行放置一个断点,然后通过调试器运行代码。 然后查看您的代码和数据并找出应该手动发生的情况。 然后单步执行每一行,检查您期望发生的情况是否确实发生。 如果不是,那就是你遇到了问题,你可以回溯(或再次运行它并更仔细地查看)以找出原因。

抱歉,我们无法为您做到这一点 – 您是时候学习一项新的(并且非常非常有用)技能了:调试!

コメント

タイトルとURLをコピーしました