等待输入完成并触发一次OnChange

时间:2019-01-09 08:35:49

标签: c# winforms textbox

我有一个将Jobs发送到AIV的应用程序。现在,我得到了一个TextBox,它从条形码扫描仪获取输入。我得到了以下自定义TextBox类(从C# wait for user to finish typing in a Text Box获得了它)。输入后10秒后,方法HandleDelayedTextChangedTimerTick触发一次并运行良好,并打印“ Hello world”。我还获得了以下表单:我连接到机器人的位置,作业在Form.CS中排队。

我的问题是:如何使用Form.CS中的HandleDelayedTextChangedTimerTick在输入并延迟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)
    {

    }
}

0 个答案:

没有答案