Дождитесь окончания ввода и завершите OnChange один раз - PullRequest
0 голосов
/ 09 января 2019

У меня есть приложение, которое отправляет Джобса в AIV. Теперь я получил TextBox, который получает данные от сканера штрих-кода. Я получил следующий пользовательский класс TextBox (получил его от: C #, ждите, пока пользователь закончит вводить текстовое поле ). Метод HandleDelayedTextChangedTimerTick запускается один раз, работает нормально и печатает «Hello world» через 10 секунд после ввода. Я также получил следующую форму: где я подключаюсь к роботу и задания ставятся в очередь в Form.CS.

У меня вопрос: как использовать HandleDelayedTextChangedTimerTick в Form.CS для запуска задания робота после ввода и задержки 10 секунд?

enter image description here

 public class MyTextBox : TextBox
{
    private TextBox textBox1;
    private Timer m_delayedTextChangedTimer;

    public event EventHandler DelayedTextChanged;

    public MyTextBox() : base()
    {
        this.DelayedTextChangedTimeout = 10 * 1000; // 10 seconds
    }

    protected override void Dispose(bool disposing)
    {
        if (m_delayedTextChangedTimer != null)
        {
            m_delayedTextChangedTimer.Stop();
            if (disposing)
                m_delayedTextChangedTimer.Dispose();
        }

        base.Dispose(disposing);
    }

    public int DelayedTextChangedTimeout { get; set; }

    protected virtual void OnDelayedTextChanged(EventArgs e)
    {
        if (this.DelayedTextChanged != null)
            this.DelayedTextChanged(this, e);
    }

    protected override void OnTextChanged(EventArgs e)
    {
        this.InitializeDelayedTextChangedEvent();
        base.OnTextChanged(e);
    }

    private void InitializeDelayedTextChangedEvent()
    {
        if (m_delayedTextChangedTimer != null)
            m_delayedTextChangedTimer.Stop();

        if (m_delayedTextChangedTimer == null || m_delayedTextChangedTimer.Interval != this.DelayedTextChangedTimeout)
        {
            m_delayedTextChangedTimer = new Timer();
            m_delayedTextChangedTimer.Tick += new EventHandler(HandleDelayedTextChangedTimerTick);
            m_delayedTextChangedTimer.Interval = this.DelayedTextChangedTimeout;
        }

        m_delayedTextChangedTimer.Start();
    }

    private void HandleDelayedTextChangedTimerTick(object sender, EventArgs e)
    {
        Timer timer = sender as Timer;
        timer.Stop();
        Console.WriteLine("Hello world");
        this.OnDelayedTextChanged(EventArgs.Empty);
    }

    private void InitializeComponent()
    {
        this.textBox1 = new System.Windows.Forms.TextBox();
        this.SuspendLayout();
        // 
        // textBox1
        // 
        this.textBox1.Location = new System.Drawing.Point(0, 0);
        this.textBox1.Name = "textBox1";
        this.textBox1.Size = new System.Drawing.Size(100, 22);
        this.textBox1.TabIndex = 0;
        this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged);
        this.ResumeLayout(false);

    }

    private void textBox1_TextChanged(object sender, EventArgs e)
    {

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...