我目前正在用C#在Visual Studio上制作Windows窗体应用程序。我有几个文本框,我希望用户输入一些内容,然后检查此信息是否存在,如果不存在,则会引发错误,并以红色显示“ Invalid File”文本框。 但是,当前,当我启用它的可见性时,它只是显示为一个空白框,没有颜色且没有格式。 这是我正在使用的代码:
catch
{
textBox9.Visible = true;
System.Threading.Thread.Sleep(3000);
textBox9.Visible = false;
}
答案 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;
}))));
}
为此感谢纳尔皮尔。这对我有用。