条形码输入后自动清除文本框并将值传递给字符串

时间:2015-02-02 01:28:27

标签: c# barcode

这是我第一次使用这款条形码阅读器硬件。我在条形码输入后自动清除文本框时遇到问题。它会在将值传递给相应的字符串之前清除文本框。

private void txtStudentID_TextChanged(object sender, EventArgs e)
{
    string a = txtStudentID.Text;
    sqlDisplayInfo = a;
    txtStudentID.Text.Clear()
}

我也尝试使用线程,但它失败了

private void txtStudentID_TextChanged(object sender, EventArgs e)
{
    string a = txtStudentID.Text;
    sqlDisplayInfo = a;
    Thread.Sleep(1000);
    txtStudentID.Text.Clear()
}

为我的新代码编辑:

我这里有问题+ =。例如,我扫描条形码,然后它结合了先前的扫描和下一次扫描

我使用计时器刻度,但它并不完美,因为它有时会导致检索数据库中的数据延迟,因此它不会与时间间隔协作

private void txtStudentID_TextChanged(object sender, EventArgs e)
        {
            timer1.Interval = (700);
            timer1.Enabled = true;
            timer1.Start();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            timer1.Stop();
            a = txtStudentID.Text;
            displayData(a);//passing string a to method data retrieve
            timer2.Interval = (700);
            timer1.Enabled = true;
            timer2.Start();
        }

        private void timer2_Tick(object sender, EventArgs e)
        {
            if (!string.IsNullOrWhiteSpace(this.txtStudentID.Text))
            {
                timer2.Stop();
                txtStudentID.Clear();
            }
        }

3 个答案:

答案 0 :(得分:1)

我想这个问题不是条形码阅读器,而是你正在使用文本更改事件的事实。当阅读器向文本框提供值时触发它(我假设文本框是如何填充的)。但是当你清除文本框时它也会触发。

所以会发生什么:

  1. 读取值(例如" 123"):填充文本框。变量sqlDisplayInfo填充了" 123"。
  2. 该方法的下一行清除文本框。
  3. 文本框为空(因此文本确实发生了变化)。 textChanged事件已触发。
  4. 文本框文本为空字符串。因此将相同的值分配给sqlDisplayInfo
  5. 因此,您看不到sqlDisplayInfo价值的任何变化。尝试调试代码,然后您可以看到事件被触发两次。

    修改

    从您的评论看起来,条形码阅读器会逐字逐句地读取。理想情况下,有一个信号表明读数已经完成。你读取字符串,在temp变量中构造它,当收到信号时,你将temp varialble的值赋给sqlDisplayInfo,清除变量和文本框。

    另一种选择可能只是阅读文本框并将其附加(不分配)到sqlDisplayInfo变量。

    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        if (string.IsNullOrWhiteSpace(this.textBox1.Text))
        {
            sqlDisplayInfo += this.textBox1.Text;
        }
    
        this.textBox1.Clear();
    }
    

    您仍会根据需要触发两倍的文本更改事件,但只有在您读取值后文本框发生更改时才会响应。

答案 1 :(得分:0)

感谢所有人给予的想法。 现在我明白了..

private void txtStudentID_TextChanged(object sender, EventArgs e)
        {
            timer1.Interval = (700);
            timer1.Enabled = true;
            timer1.Start();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            timer1.Stop();
            a = txtStudentID.Text;
            displayData(a);// i put the txtStudentID.Clear() at the end of the method. I think i need some rest. :)
        }

答案 2 :(得分:0)

这可能对您有帮助!

var id = record.submitFields({
    type: recordType,
    id: id,
    values: {
        fieldId: value
    },
    options: {
        enableSourcing: false,
        ignoreMandatoryFields : true
    }
});