如果用户未在文本框中输入任何内容3秒钟,我正在寻找代码示例/算法来执行操作。
我的风景:如果文本框有焦点,我想要提交textbox
,但是用户没有写任何东西3秒钟。这可能吗?
答案 0 :(得分:3)
您可以在TextChange
中设置一个事件,将当前时间存储到变量中,以便对文本框进行任何更改。
然后你可以添加每秒触发的Timer
。计时器可以检查文本框是否具有焦点,如果是,则变量中的时间戳是否超过三秒(并且可能是文本框是否为空),如果是,则调用您的提交方法。 / p>
答案 1 :(得分:2)
我没有现成的示例,但我相信您可以使用Timer
来完成此任务。将超时设置为3000毫秒,当用户键入文本框时重置它(使用TextChanged或等效事件,不仅仅是KeyPress,不会在右击菜单剪贴板等等上激活),并在计时器处理程序中,禁用计时器(以确保它不会反复触发)并执行您喜欢的任何逻辑。此外,根据文本框是否具有焦点,启用/禁用计时器。
答案 2 :(得分:2)
您需要设置System.Windows.Forms.Timer
计时器。每当文本框中的文本发生更改(TextChanged
事件)时,您需要重新启动计时器以在3秒内触发。如果计时器发生,则表示用户未输入任何内容时已经过了3秒。
但是,请注意,这是代表您的应用程序的非常奇怪的行为,并且它不太可能被任何用户欣赏。
答案 3 :(得分:1)
以下是如果用户未移动鼠标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
}
答案 4 :(得分:1)
您可以使用间隔为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!");
}
}