如何知道是否在那里召唤了一个事件三秒钟?

时间:2012-01-12 13:58:37

标签: c# .net events controls

如果用户未在文本框中输入任何内容3秒钟,我正在寻找代码示例/算法来执行操作。

我的风景:如果文本框有焦点,我想要提交textbox,但是用户没有写任何东西3秒钟。这可能吗?

5 个答案:

答案 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!");
    }
}