C# 如何知道事件是否在那里被调用了三秒?
我正在寻找一个代码示例/算法,如果用户在3秒钟内没有在文本框中输入任何内容,则执行操作C# 如何知道事件是否在那里被调用了三秒?,c#,.net,events,controls,C#,.net,Events,Controls,我正在寻找一个代码示例/算法,如果用户在3秒钟内没有在文本框中输入任何内容,则执行操作 我的风景:我有一个文本框,如果文本框有焦点,我想提交它,但是用户已经3秒钟没有写任何东西了。这可能吗 您可以在TextChange中有一个事件,它将当前时间存储到一个变量中,以便对文本框进行任何更改 然后,您可以添加每秒触发的计时器。计时器可以检查文本框是否有焦点,如果有,变量中的时间戳是否超过3秒(可能是文本框是否为空),如果有,请调用您的提交方法。我没有现成的示例,但我相信您可以使用计时器来完成此操作。将
我的风景:我有一个
文本框
,如果文本框有焦点,我想提交它,但是用户已经3秒钟没有写任何东西了。这可能吗 您可以在TextChange
中有一个事件,它将当前时间存储到一个变量中,以便对文本框进行任何更改
然后,您可以添加每秒触发的
计时器。计时器可以检查文本框是否有焦点,如果有,变量中的时间戳是否超过3秒(可能是文本框是否为空),如果有,请调用您的提交方法。我没有现成的示例,但我相信您可以使用计时器来完成此操作。将超时设置为3000毫秒,当用户在文本框中键入时将其重置(使用TextChanged或等效事件,而不仅仅是在右键单击菜单剪贴板粘贴等时不会触发的按键),并在计时器处理程序中,禁用计时器(确保它不会重复触发)并执行您喜欢的任何逻辑。此外,根据文本框是否有焦点,启用/禁用计时器。下面是一个示例,说明如果用户不移动鼠标3秒,如何隐藏光标。
您必须使用TextChange事件执行类似的操作
private DispatcherTimer CursorTimer { get; set; }
private DateTime CursorLastMoveTime { get; set; }
void CursorTimer_Tick(object sender, EventArgs e)
{
TimeSpan delta = DateTime.Now.Subtract(this.CursorLastMoveTime);
if (delta.TotalSeconds > 3)
{
CursorTimer.Stop();
Mouse.OverrideCursor = Cursors.None;
}
}
private void Window_MouseMove(object sender, MouseEventArgs e)
{
#region Hide/Show cursor over the main window
Mouse.OverrideCursor = Cursors.Arrow;
CursorLastMoveTime = DateTime.Now;
if (CursorTimer.IsEnabled == false)
CursorTimer.Start();
#endregion
}
您需要设置System.Windows.Forms.Timer
Timer。每当文本框中的文本发生变化时(TextChanged
event),您需要重新启动计时器以在3秒钟内启动。如果计时器曾经启动,这意味着用户没有键入任何内容时已经过了3秒
但是,请注意,对于您的应用程序来说,这是一种非常奇怪的行为,并且不太可能被任何用户欣赏。您可以使用间隔为3000毫秒的计时器。如果间隔已过,则会触发一个事件,如果用户在文本框中输入文本,则会重置计数
public partial class Form1 : Form
{
System.Timers.Timer timer;
public Form1()
{
InitializeComponent();
timer = new System.Timers.Timer();
timer.Interval = 3000;
timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
textBox1.KeyPress += new KeyPressEventHandler(textBox1_KeyPress);
textBox1.GotFocus += new EventHandler(textBox1_GotFocus);
textBox1.LostFocus += new EventHandler(textBox1_LostFocus);
}
void textBox1_LostFocus(object sender, EventArgs e)
{
timer.Stop();
}
void textBox1_GotFocus(object sender, EventArgs e)
{
timer.Start();
}
void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
timer.Stop();
timer.Start();
}
void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
MessageBox.Show("You have not entered text in the last 3 seconds!");
}
}
那么,当文本框获得焦点时,开始计数,并在三秒后通过执行其他操作进行干预?这就是你要问的吗?你是在使用winforms还是wpf?@Yuck:…如果用户在三秒内开始做某事,不要忘记取消其他操作。正如其他人所说,请注意,TextChanged事件是一个更好的选择,而不是本例中的按键。