有一点需要注意,光标位于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个非常好的解决方案,我可以看到他们是如何工作的,并学到了很多。只是在我的情况下不起作用--更有可能是由于我自己或我的错误/不理解,或者扫描仪类型。
我不太确定实际的问题是什么。
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”的巨大二维码),它都不会起作用