当前位置: 首页 > 知识库问答 >
问题:

C#WinForm+条形码扫描器输入,TextChanged错误

章禄
2023-03-14

有一点需要注意,光标位于memberid:00888的末尾

到目前为止一切都很好:

当第2次(如下一个人)发生时

txtBoxCatchScanner.Clear();
txtBoxCatchScanner.Text = "";

但我想它们会触发TextChanged事件

我如何重新聚焦或...清除旧的数字和光标回到txtBox的开始后,之前的滑动完成了它的东西...

我是一个初学者,所以我敢肯定下面的代码是相当垃圾....

if (txtBoxCatchScanner.Text.Length == 5)
{
label1.Text = txtBoxCatchScanner.Text; // just a label for testing .. shows the memmber ID
txtBoxCatchScanner.Select(0, 5);
}

问题:不是所有的条形码都是5位数!!它们是随机长度!!Memeber ID从2位数(如25)到10位数不等,并将在未来增长。

编辑:我发现条形码是按下分叉键读取的。我想这就是为什么下面的答案1不起作用,而大概率:

例如,对于00675,扫描仪的输入(?输出)为:

private void txtBoxCatchScanner_TextChanged(object sender, EventArgs e)
{             
    Member member = new Member();
    member.FirstName = "";
    member.LastName = "";            

    //Get BarCode
    //VALIDATE: Is a Number           
    double numTest = 0;
    if (Double.TryParse(txtBoxCatchScanner.Text, out numTest))
    {
        //IS A NUMBER
        member.MemberID = Convert.ToInt32(txtBoxCatchScanner.Text);

        //SEARCH
        //Search Member by MemberID (barcode)
        List<Member> searchMembers = Search.SearchForMember(member);

        if (searchMembers.Count == 0)
        {
            lblAlert.Text = "No Member Found";
        }
        else
        {
            foreach (Member mem in searchMembers)
            {
                lblMemberStatus.Text = mem.MemberStatus;
                lblMemberName.Text = mem.FirstName + " " + mem.LastName;
                lblMemberID.Text = mem.MemberID.ToString();

                lblMessages.Text = mem.Notes;

                if (mem.MemberStatus == "OVERDUE") // OR .. OR .. OR ...
                {
                    lblAlert.Visible = true;
                    lblAlert.Text = "!! OVERDUE !!";

                    //PLAY SIREN aLERT SOUND
                    //C:\\WORKTEMP\\siren.wav
                    SoundPlayer simpleSound = 
                        new SoundPlayer(@"C:\\WORKTEMP\\siren.wav");
                    simpleSound.Play();
                }
                else
                {
                    lblAlert.Visible = true;
                    lblAlert.Text = mem.MemberStatus;
                }
            }
        }
    }
    else
    {
        //IS NOT A NUMBER
        lblAlert.Text = "INVALID - NOT A NUMBER";                

        ////
        //lblMemberName.Text = "";
        //lblMemberID.Text = "";
        //lblMemberID.Text = "";
    }

系统不会让我再回答我自己的问题3个小时,因为我是一个新手只有1个帖子,所以将在这里:

首先感谢大家的帮助和耐心。

我终于想出了一个孤独,还没有完全测试,因为它是凌晨2点和睡觉时间。

namespace SCAN_TESTING
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void txtBoxCatchScanner_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.KeyValue == (char)Keys.Return)
        {
            e.Handled = true;

            int barcodeLength = txtBoxCatchScanner.TextLength;

            txtBoxCatchScanner.Select(0, barcodeLength);

            //TEST
            label3.Text = barcodeLength.ToString();
            //TEST
            label2.Text = txtBoxCatchScanner.Text;

        }

    }
private void txtBoxCatchScanner_KeyUp(object sender, KeyEventArgs e)
{
   if (e.KeyValue == (char)Keys.Return)
      {
            e.Handled = true;

            int barcodeLength = txtBoxCatchScanner.TextLength;

            txtBoxCatchScanner.Select(0, barcodeLength);

           //
           //INSERT ORGINAL CODE HERE. No Changes were needed.
           //


      }//end of if e.KeyValue ...
}//end txtBoxCatchScanner_KeyUp

再次感谢2个非常好的解决方案,我可以看到他们是如何工作的,并学到了很多。只是在我的情况下不起作用--更有可能是由于我自己或我的错误/不理解,或者扫描仪类型。

共有1个答案

方博
2023-03-14

我不太确定实际的问题是什么。

txtBoxCatchScanner.Clear();
txtBoxCatchScanner.Text = "";

两者都会触发“已更改”事件。但他们也会清理盒子。所以那应该是你想做的。

您可以在开始时检查该框是否实际上是空的,如果是空的,则返回。比如:

if(txtBoxCatchScanner.Text == "" |txtBoxCatchScanner.Text == string.Empty)
return;

如果我误解了你的问题,请详细说明,我会尽力帮助你。

问候

编辑:

    private void txtBoxCatchScanner_TextChanged(object sender, EventArgs e)
{             
Member member = new Member();
member.FirstName = "";
member.LastName = "";            

if(txtBoxCatchScanner.Text == "" | txtBoxCatchScanner.Text == string.Empty)
return;    // Leave function if the box is empty

//Get BarCode
//VALIDATE: Is a Number           
int numTest = 0;
if (int.TryParse(txtBoxCatchScanner.Text, out numTest))
{
    //IS A NUMBER
    //member.MemberID = Convert.ToInt32(txtBoxCatchScanner.Text);
    member.MemberID = numTest; // you already converted to a number...
    //SEARCH
    //Search Member by MemberID (barcode)
    List<Member> searchMembers = Search.SearchForMember(member);

    if (searchMembers.Count == 0)
    {
        lblAlert.Text = "No Member Found";
    }
    else
    {
        foreach (Member mem in searchMembers)
        {
            lblMemberStatus.Text = mem.MemberStatus;
            lblMemberName.Text = mem.FirstName + " " + mem.LastName;
            lblMemberID.Text = mem.MemberID.ToString();

            lblMessages.Text = mem.Notes;

            if (mem.MemberStatus == "OVERDUE") // OR .. OR .. OR ...
            {
                lblAlert.Visible = true;
                lblAlert.Text = "!! OVERDUE !!";

                //PLAY SIREN aLERT SOUND
                //C:\\WORKTEMP\\siren.wav
                SoundPlayer simpleSound = 
                    new SoundPlayer(@"C:\\WORKTEMP\\siren.wav");
                simpleSound.Play();
            }
            else
            {
                lblAlert.Visible = true;
                lblAlert.Text = mem.MemberStatus;
            }
        }
    }
}
else
{
    //IS NOT A NUMBER
    lblAlert.Text = "INVALID - NOT A NUMBER";                

    ////
    //lblMemberName.Text = "";
    //lblMemberID.Text = "";
    //lblMemberID.Text = "";
}
txtBoxCatchScanner.Clear();
}
 类似资料:
  • 使用ML Kit的条码扫描API,您可以读取大多数使用标准条码格式编码的数据。 条形码是将信息从现实世界传递到应用程序的一种便捷方式。特别是,使用QR码等二维格式时,您可以编码结构化数据,如联系人信息或WiFi网络凭证。由于ML Kit可以自动识别和解析这些数据,因此当用户扫描条形码时,您的应用可以进行智能响应。 iOS Android 关键功能 阅读大多数标准格式 线性格式:Codabar,Co

  • 我正在构建一个基本的价格检查应用程序,可以扫描条形码并显示产品信息,并试图在内置条形码扫描仪的Android平板电脑上运行它。 扫描仪可以工作,如果我把一个文本框放在应用程序上并对其进行聚焦,我扫描的条形码就会写在上面--然而,如果应用程序不对文本框进行聚焦,我就无法捕捉输入(应用程序应该没有输入区域,只有图像和文本视图标签)。 我查看了重写KeyUp和KeyDown事件,但它们似乎是为捕获单个键

  • 所以,我正在尝试使用我的条形码扫描器作为一个‘串行’设备,而不是一个键盘模拟器,但它没有创建com端口。我已经从手册上扫描了设置代码,将其设置为串行设备,这似乎正确配置了扫描仪(它停止将扫描代码发送到文本框\文本编辑器),但因为没有COM端口,所以我扫描条形码时无法捕获数据...... Windows在第一次插入时安装了驱动程序,但没有提供磁盘\驱动程序...不知道还有没有人经历过同样的问题...

  • 我有一个问题,让我的PhoneGap 3.2.0应用程序在Mac上编译,当Zbar条形码扫描器插件实现。如果我部署到该设备,它将在XCode内编译,但如果部署到模拟设备,它会给出错误: ld:警告:忽略文件/users/cordova/myapp/platforms/ios/zbarsdk/libzbar.a,文件/users/cordova/myapp/platforms/ios/zbarsdk

  • 对于作业,我必须编写以下代码: 当我尝试编译它时,它在命令提示符下给了我3个错误,说“无法解析符号,符号:类扫描仪,位置:类单词,扫描仪用户输入=新扫描仪(System.in)”。我不确定错误在哪里。我应该使用BufferedReader作为输入吗?

  • 我正在为平板电脑开发一个android应用程序(SynchroDigital iNOSP10-4.0 RES型号),我想使用ZXing库扫描包含字符串的QRcode。它会在我需要时启动扫描仪,但我无法扫描任何东西。 实际上,如果我直接使用条形码扫描仪应用程序,它甚至不起作用,黄色的点出现了,但什么也没有发生,无论亮度、距离或二维码的复杂性(尝试使用一个只包含字母“a”的巨大二维码),它都不会起作用