使文本框可见会隐藏所有格式

时间:2019-01-14 16:50:50

标签: c# winforms

我目前正在用C#在Visual Studio上制作Windows窗体应用程序。我有几个文本框,我希望用户输入一些内容,然后检查此信息是否存在,如果不存在,则会引发错误,并以红色显示“ Invalid File”文本框。 但是,当前,当我启用它的可见性时,它只是显示为一个空白框,没有颜色且没有格式。 这是我正在使用的代码:

catch
{
  textBox9.Visible = true;
  System.Threading.Thread.Sleep(3000);
  textBox9.Visible = false;
}

This is what I want it to look like
This is what it does look like

3 个答案:

答案 0 :(得分:0)

唯一发生的是txtbox可见,因此执行的唯一代码是catch内的代码...

尝试设置捕获中的所有属性,诸如此类:

确定现在将全部执行。

catch
{
  textBox9.Text = "Invalid File";
  textBox9.BackColor = Color.Red;
  textBox9.Visible = true;
  Thread.Sleep(3000);
  textBox9.Visible = false;
}

编辑:

我看到了注释,是的,Thread将阻止所有代码3秒钟。 因此,我还有其他选择,例如:

catch
{
  textBox9.Text = "Invalid File";
  textBox9.BackColor = Color.Red;
  textBox9.Visible = true;
  int seconds = 3;
        if (seconds < 1) return;
        DateTime _desired = DateTime.Now.AddSeconds(seconds);
        while (DateTime.Now < _desired)
        {
             System.Windows.Forms.Application.DoEvents();
        }
  textBox9.Visible = false;
}

答案 1 :(得分:-1)

如果我理解正确,您正在尝试使文本框在3秒钟内工作,然后消失,如果这样,您所需的代码将如下所示:

Task.Run(async () => 
  this.Invoke(new Action(delegate (){
    textBox9.Visible = true;
    await Task.Delay(3000)
    textBox9.Visible = false;
}));

编辑:此代码是必需的,因为您不想挂整个线程,只需等待3秒钟,然后使其消失,就可以了,如果不使用线程,就冻结了整个应用程序

EDIT2:它什么也没有显示,因为您要在线程在屏幕上绘制之前冻结线程,然后将文本框设置为隐藏。所以什么都不会显示

答案 2 :(得分:-1)

        private void DisplayError()
    {
        Task.Run(async () => (
                 this.Invoke(new Action(async delegate () {
                     textBox9.Visible = true;
                     await Task.Delay(3000);
                     textBox9.Visible = false;
                 }))));
    }

为此感谢纳尔皮尔。这对我有用。