El color de fondo del cuadro de texto de C# winform no cambió con la declaración if-else

programación


Tengo dos botones (leer y escribir), cada lectura y escritura tiene 5 cuadros de texto. Quiero comparar el valor entre lectura y escritura, si coincide, el cuadro de texto mostrará el color verde y el color rojo, pero no cambió el color cuando vuelvo a hacer clic en el botón de lectura.

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;
    }

}

Lo que he probado:

Intento usar el método de invocación y dejar el color vacío, pero tampoco hay respuesta al cambio de color.

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

Solución 1

Invocar es irrelevante: solo es necesario cuando se utiliza un subproceso distinto del subproceso principal de la GUI. Invocar “mueve el código” de nuevo al subproceso de la GUI para que sea seguro acceder a los controles.

Si su color no cambia, hay varias razones posibles, por ejemplo si totalCount es cero o negativo, el color no cambiará.
No podemos saberlo sin poder ejecutar su código en su totalidad, y no podemos hacerlo porque no tenemos acceso a su sistema.

Entonces, dependerá de ti.
Afortunadamente, tienes una herramienta a tu disposición que te ayudará a descubrir qué está pasando: el depurador. Si no sabe cómo usarlo, una búsqueda rápida en Google para “depurador de Visual Studio” debería brindarle la información que necesita.

Coloque un punto de interrupción en la primera línea de la función y ejecute su código a través del depurador. Luego mire su código y sus datos y determine qué debería suceder manualmente. Luego, realice un solo paso en cada línea para verificar que lo que esperaba que sucediera sea exactamente lo que sucedió. Cuando no es así, es cuando tienes un problema y puedes retroceder (o ejecutarlo nuevamente y observar más de cerca) para descubrir por qué.

Lo sentimos, pero no podemos hacer eso por usted. Es hora de que aprenda una habilidad nueva (y muy, muy útil): ¡depurar!

コメント

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