您好,我目前正在使用Windows窗体制作一个潜意识的消息传递程序,我有一个出现的窗体,然后迅速消失了。
除了计时器的显示和隐藏表格的计时之外,我现在几乎可以正常工作。
我当前正在使用2个计时器
现在,我知道这不是一个好选择,因为在表单显示后,隐藏表单所需的时间会不断变化。
我想不出一种算法,该算法可以使间隔以某种方式协同工作,因此显示表单然后隐藏不会改变,但仍会很快完成。
我需要在表单出现后尽快将其隐藏起来,但要在3-5秒内再次显示。
谢谢
答案 0 :(得分:0)
您想要做的是链接您的计时器,启动和停止它们,以便它们保持间隔。
您说您希望表单在3-5秒后显示,然后在750ms后隐藏(计时器间隔记录为毫秒)。
如果我们将计时器Timer_Show和Timer_Hide以及表单实例称为SubForm,那么我们可以:
public partial class SubForm : Form
{
public SubForm()
{
InitializeComponent();
// This timer will show the screen
Timer Timer_Show = new Timer();
Timer_Show.Tick += Timer_Show_Tick;
Timer_Show.Interval = 3000;
Timer_Show.Enabled = true;
// This timer will hide the screen
Timer Timer_Hide = new Timer();
Timer_Hide.Tick += Timer_Hide_Tick;
Timer_Hide.Interval = 750;
Timer_Hide.Enabled = false;
}
public void Timer_Show_Tick(object sender, EventArgs e)
{
Timer_Show.Stop();
this.Show();
Timer_Hide.Start();
}
public void Timer_Hide_Tick(object sender, EventArgs e)
{
Timer_Hide.Stop();
this.Hide();
Timer_Show.Start();
}
}
我已将Timer实例化移动到构造函数中,以便您了解发生了什么情况。
首先,我们将Timer_Show
间隔设置为3000ms(3秒)。然后,将Timer_Hide
间隔设置为750ms。我们禁用Timer_Hide
,但启用Timer_Show
。
3秒后,Timer_Show_Tick
将触发。然后,它将禁用Timer_Show
,显示SubForm
的当前实例,然后启动Timer_Hide
。
然后在750毫秒后Timer_Hide_Tick
触发,停止Timer_Hide
,隐藏SubForm
的当前实例,然后启动Timer_Start
重新启动整个过程。
屏幕将始终在最后一次显示后3秒钟显示,并且将保持可见状态750ms。这样可以使您的显示/隐藏计时器保持同步。
如果要将3秒更改为其他时间,则可以实例化Random
。例如
Random rand = new Random();
将Random
作为类级别变量,然后在调用Timer_Hide_Tick
之前的Timer_Show.Start()
中,可以调用Timer_Show.Interval = rand.NewRand(3000, 5000);
,这将为3000和5000之间的随机数选择间隔值,因此显示屏幕的时间不一定总是上次显示的3秒。
您的屏幕显示/隐藏仍将保持同步,因此您永远不会陷入屏幕已经隐藏的情况下隐藏着火的情况。