C# 使标签出现和消失的计时器非常缓慢且无响应
我希望这样,当单击表单时,标签将显示x毫秒。然后消失了 顺便说一句,我试着用C# 使标签出现和消失的计时器非常缓慢且无响应,c#,.net,winforms,visual-studio,C#,.net,Winforms,Visual Studio,我希望这样,当单击表单时,标签将显示x毫秒。然后消失了 顺便说一句,我试着用timer1.Start()替换timer1.Enabled=true,用timer1.Stop()替换timer1.Enabled=false,但没有什么区别 这是我的密码。我有一个表单,我以编程方式创建了一个标签,并将其添加到表单中,我还以编程方式创建了一个计时器。间隔设置为300毫秒(我可能会在以后减少,但现在是300毫秒) 其思想是标签从.code>Visible=false开始,然后单击表单时,标签应在300毫
timer1.Start()
替换timer1.Enabled=true
,用timer1.Stop()
替换timer1.Enabled=false
,但没有什么区别
这是我的密码。我有一个表单,我以编程方式创建了一个标签,并将其添加到表单中,我还以编程方式创建了一个计时器。间隔设置为300毫秒(我可能会在以后减少,但现在是300毫秒)
其思想是标签从.code>Visible=false开始,然后单击表单时,标签应在300毫秒内变为可见,然后变为不可见。我试图做到这一点,在计时器第一次运行时,即启用后,使标签可见,第二次使标签不可见
我管理它,即使不需要计算计时器运行的次数,我也可以简单地说,如果标签不可见(这必须是计时器第一次运行刚刚启用),则使其可见,如果标签可见(即,它必须是计时器第二次运行)然后使其不可见并禁用计时器
问题是它反应迟钝,反应不快。我点击,我有一个MouseDown
的事件,但是在这和标签出现之间有一个延迟
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApplication16
{
public partial class Form1 : Form
{
Label label1;
Timer timer1;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
timer1 = new Timer();
timer1.Interval = 300;
timer1.Tick += timer1_Tick;
label1 = new Label();
label1.Text = "blah";
label1.Visible = false;
this.Controls.Add(label1);
}
private void timer1_Tick(object sender, EventArgs e)
{
if (label1.Visible == false) { label1.Visible = true; }
else { label1.Visible = false; timer1.Enabled = false; }
}
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
timer1.Enabled = true;
}
}
}
原因是启用计时器后,它不会立即运行tick方法。如果将时间间隔延长到3000毫秒,则可以清楚地看到这一点。鉴于这一事实,解决方案就是这样
private void timer1_Tick(object sender, EventArgs e)
{
label1.Visible = false;
timer1.Enabled = false;
}
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
label1.Visible = true;
timer1.Enabled = true; //will wait timer1.interval milliseconds then run tick
}
原因很简单,我也会给出答案,这证实了启用和禁用,以及启动和停止之间没有区别。原因是启用计时器后,它不会立即运行tick方法。惊奇,惊奇..@TaW如果你要引用我或任何人的话,那就用引号。我在评论中用斜体,在问答中用引号。@TaW这不是标准惯例。你仍然应该在引语周围使用引号,否则你应该包括一些明确的指示,表明你在引用,例如,用你写的词在引语前面,否则你不清楚你在引用。哇,你真的在教育我。但正如我所说的,我照着做。如果你不喜欢,为什么不删除你“问题”的“答案”?(注意引号;-)