Как узнать, было ли там событие в течение трех секунд? - PullRequest
2 голосов
/ 12 января 2012

Я ищу пример кода / алгоритм для выполнения действия, если пользователь не вводил ничего в текстовое поле в течение 3 секунд.

Мой пейзаж: у меня есть textbox, который я хочу отправить, если текстовое поле имеет фокус, но пользователь ничего не написал в течение 3 секунд. Это возможно?

Ответы [ 5 ]

3 голосов
/ 12 января 2012

В TextChange может быть одно событие, которое сохраняет текущее время в переменной для любого изменения в текстовом поле.

Затем вы можете добавить Timer, который срабатывает каждую секунду. Таймер может проверить, имеет ли текстовое поле фокус, и если это так, имеет ли метка времени в переменной более трех секунд (и, возможно, текстовое поле пустое или нет), и если это так, вызовите метод submit. 1005 *

2 голосов
/ 12 января 2012

Вам необходимо установить таймер System.Windows.Forms.Timer. Всякий раз, когда текст в текстовом поле изменяется (событие TextChanged), вам необходимо перезапустить таймер, чтобы сработать через 3 секунды. Если таймер срабатывает, это означает, что прошло 3 секунды, пока пользователь ничего не печатал.

Однако учтите, что это очень странное поведение от имени вашего приложения, и маловероятно, что оно будет оценено любым пользователем.

2 голосов
/ 12 января 2012

У меня нет готового примера, но я считаю, что вы могли бы использовать Timer для этого.Установите тайм-аут на 3000 мс, сбросьте его, когда пользователь вводит текстовое поле (используйте TextChanged или эквивалентное событие, , а не , просто нажатие клавиши, которое не будет срабатывать при вставках буфера обмена в контекстном меню и т.п.), ив обработчике таймера отключите таймер (чтобы он не срабатывал многократно) и выполняйте любую логику, какую захотите.Кроме того, включите / отключите таймер в зависимости от того, находится ли текстовое поле в фокусе.

1 голос
/ 12 января 2012

Вы можете использовать таймер с интервалом в 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!");
    }
}
1 голос
/ 12 января 2012

Вот пример того, как скрыть курсор, если пользователь не двигает мышь 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
        }
...