Member 13594478 Ответов: 2

C#: как мне отобразить текст на некоторое время, а затем исчезнуть в текстовом поле?


Привет, у меня есть 3 текстовых поля. Когда я ввожу значение в textBox1 и textBox2, я хочу некоторое время отображать текст "отклонить" в textBox3, а затем тексты как в textBox2, так и в textBox3 исчезают.

Однако текст в textBox3 не отображается, но продолжает очищаться. Как я могу изменить свои коды?

Что я уже пробовал:

private void textBox2_TextChanged(object sender, EventArgs e)
     {
            try
            {   
                if (float.Parse(textBox1.Text) < float.Parse(textBox2.Text))
                {
                    textBox3.Text = "accept";
                }
                else
                {
                    
                    textBox3.Text = "reject";
                    Thread.Sleep(500);
                    textBox3.Clear();

                }
              
            }
            catch
            {
                if(textBox2.Text == String.Empty)
                {
                    textBox3.Text = String.Empty;
                }
            }
     }

2 Ответов

Рейтинг:
2

Richard MacCutchan

Вызов Thread.Sleep(500); блокирует поток пользовательского интерфейса, поэтому дисплей не обновляется до тех пор, пока вызов textBox3.Clear().


Рейтинг:
2

OriginalGriff

Вы не можете писать код windows так же, как вы делаете консольное приложение: они работают совершенно по-разному.
Приложения Windows работают с сообщениями, которые разливаются по всей системе и заканчиваются событиями в вашем приложении - и одним из таких событий является событие Paint. Пока ваш код не закончен, рисование не происходит - поэтому, когда вы вызываете Sleep в потоке пользовательского интерфейса, нет ничего, чтобы обработать Paint (или любое другое) событие, поэтому дисплей не обновляется, и ваш пользователь ничего не видит, кроме того, что ваше приложение перестало отвечать на запросы.

В приложении Windows вы должны кодировать события и реагировать на то, что происходит. Чтобы отобразить сообщение, которое исчезает, добавьте таймер в свой код и обработайте его тиковое событие:

private System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
private DateTime clearAt = DateTime.MaxValue;
private void frmMain_Shown(object sender, EventArgs e)
    {
    timer.Tick += timer_Tick;
    timer.Interval = 250;
    timer.Start();
    }

void timer_Tick(object sender, EventArgs e)
    {
    if (clearAt < DateTime.Now)
        {
        clearAt = DateTime.MaxValue;
        myTextBox.Text = "";
        }
    }
Затем, когда вы устанавливаете текст, установите тайм-аут:
clearAt = DateTime.Now.AddSeconds(5);
myTextBox.Text = "My Text to show briefly";