我想这样做,以便在单击表单时,标签会显示x毫秒。然后就消失了。
顺便说一下,我尝试将timer1.Enabled=true
替换为timer1.Start()
,将timer1.Enabled=false
替换为timer1.Stop()
,但这没有任何区别。
这是我的代码。我有一个表单,我已经以编程方式创建了一个标签,我已经添加到表单上,并且我已经以编程方式创建了一个计时器。间隔设置为300毫秒(我可能会减少它,但现在,300毫秒)。
这个想法是标签以。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;
}
}
}
答案 0 :(得分:0)
原因是在启用计时器后,它不会立即运行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
}