C# 使控件仅在c中的特定时间内可见#
我正在开发一个需要满足以下要求的应用程序: 假设我的表单中有一个按钮和一个标签(最初可见性设置为false),并且用户单击该按钮,那么标签应该显示一些文本,我在按钮单击中指定给标签。但是这个标签应该只显示一段时间,比如说3秒钟,然后它就会自动消失。为此,如果我给出:C# 使控件仅在c中的特定时间内可见#,c#,controls,C#,Controls,我正在开发一个需要满足以下要求的应用程序: 假设我的表单中有一个按钮和一个标签(最初可见性设置为false),并且用户单击该按钮,那么标签应该显示一些文本,我在按钮单击中指定给标签。但是这个标签应该只显示一段时间,比如说3秒钟,然后它就会自动消失。为此,如果我给出: private void button1_Click(object sender, EventArgs e) { label1.Visible=true; label1.Text= "Magic";
private void button1_Click(object sender, EventArgs e)
{
label1.Visible=true;
label1.Text= "Magic";
Thread.Sleep(3000);
label1.Visible=false;
}
此代码无助于实现此目的。这是什么方法 创建一个时间间隔为3s的
aInterval
,启动它,并在计时器计时事件中将Visible
设置为false
。也不要忘记停止计时器
决不在UI线程中调用
线程。睡眠
:应用程序将被阻止,因为UI线程在睡眠时不接受消息(用户单击…)。使用计时器,可能是Windows.Forms.Timer。您可能需要在需要和不需要时启用和禁用它。您当前的方式没有帮助,因为您使主UI线程处于休眠状态。没有用。尝试用以下内容替换方法的最后两行:
// create a global _timer object
static Timer _timer; // From System.Timers
private void button1_Click(object sender, EventArgs e)
{
label1.Text = "Magic";
// Thread.Sleep(3000); // don't do Thread.Sleep()!
label1.Visible = false;
Start();
}
static void Start()
{
label1.Visible = true;
_timer = new Timer(3000); // Set up the timer for 3 seconds
_timer.Elapsed += new ElapsedEventHandler(_timer_Elapsed);
_timer.Enabled = true; // Enable it
}
static void _timer_Elapsed(object sender, ElapsedEventArgs e)
{
label1.Visible = false;
_timer.Stop();
}
System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
timer.Interval = 3000;
timer.Tick += (source, e) => {label1.Visible = false; timer.Stop();};
timer.Start();
在WinForms中使用Thread.Sleep()从来都不是一个好主意;改用计时器。你不需要显式停止计时器,只要确保它的
AutoReset
属性设置为false
@paul System.Windows.Forms.timer类没有这样的属性(它只存在于System.timers.timer中)。@Daniel:那就行了。简单又漂亮。谢谢你能给我解释一下代码中的第三行吗?第三行代码使用a来避免编写完整的方法(即带有签名的方法,与任何其他方法分开)。理想情况下,它适用于只需使用该方法一次的地方—如果需要多次使用,则应实现单独的方法并使用EventHandler调用它。@Daniel您应指定使用的计时器。我可以理解它是System.Windows.Forms.Timer one,因为Tick事件,但请注意框架中有多个可用计时器(System.Threading.Timer,System.Timer.Timer…)嘿,伙计们,谢谢。。成功了:)@Daniel:也谢谢你提供的信息