C# 如何知道事件是否在那里被调用了三秒?

C# 如何知道事件是否在那里被调用了三秒?,c#,.net,events,controls,C#,.net,Events,Controls,我正在寻找一个代码示例/算法,如果用户在3秒钟内没有在文本框中输入任何内容,则执行操作 我的风景:我有一个文本框,如果文本框有焦点,我想提交它,但是用户已经3秒钟没有写任何东西了。这可能吗 您可以在TextChange中有一个事件,它将当前时间存储到一个变量中,以便对文本框进行任何更改 然后,您可以添加每秒触发的计时器。计时器可以检查文本框是否有焦点,如果有,变量中的时间戳是否超过3秒(可能是文本框是否为空),如果有,请调用您的提交方法。我没有现成的示例,但我相信您可以使用计时器来完成此操作。将

我正在寻找一个代码示例/算法,如果用户在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事件是一个更好的选择,而不是本例中的按键。