更新:最後に解決策
私はWinformを持っています.label1は、バーコードスキャナーから受け取った入力(MemberID)を使用して、SQL検索から返された情報を表示しますtxtBoxCatchScanner
。
シナリオは、受信者が受付を通過する際に MemberID カードをスキャナーの下にスワイプし、Winform が自動的にその MemberID を検索し、受付係の PC の隅に winForm がある「期限切れのメンバーシップ」などの情報を返すことです。デスクトップ。
最初のスワイプで以下のコードが正常に機能しています(例:一人称)
テキスト ボックスに 00888 などの番号 MemberID が表示されると、ADO.NET は SQL からデータを取得し、正常に表示します。
カーソルが memberID: 00888| の末尾にあることに注意してください。
ここまでは順調です。次に:
スワイプ 2 (例: 次の人) が発生したとき
それらの番号 (たとえば、00999) は、txtBox の最初の末尾に配置されます。たとえば、0088800999 のように、TextChanged Fires が発生すると、00999 ではなく 0088800999 が検索されます ....
私はもう試した:
txtBoxCatchScanner.Clear();
と
txtBoxCatchScanner.Text = "";
フォームのリロード
コードの最後にテキストボックスを「更新」する
しかし、TextChangedイベントをトリガーすると思います
どうすれば焦点を合わせ直すか...前のスワイプが完了した後、古い番号をクリアしてカーソルをtxtBoxの先頭に戻すことができます...
私は初心者なので、以下のコードはかなりがらくただと確信しています....
しかし、誰か時間があれば、私がやりたいことを修正する方法を教えてください。
アップデート:
OK、多くの実験の後、この 1/2 を機能させることができました。うまくいけば、より多くの経験を積んだ誰かが私を完成させるのに役立ちます! :P
if (txtBoxCatchScanner.Text.Length == 5)
{
label1.Text = txtBoxCatchScanner.Text; // just a label for testing .. shows the memmber ID
txtBoxCatchScanner.Select(0, 5);
}
SO スキャン 1、たとえば 00888 、次にそれが強調表示され、スキャン 2 、たとえば 00997 ... 甘い! 00888 を上書き (追加ではありません) して実行します ... スキャン 2 0011289 ... DOH!!
問題: すべてのバーコードが 5 桁であるとは限りません!! 彼らはランダムな長さです!! メンバー ID は 2 桁 (例: 25) から 10 桁までの範囲であり、将来的には増加する予定です...
編集:私が発見したことは、バーコードが個々のキーの押下として読み取られるということです。これが、以下の回答1が機能しない理由であり、大きな問題があると思います:
たとえば、00675 の場合、スキャナからの入力 (?出力) は次のようになります。
ダウン: ドゥ アップ: ドゥ ダウン: ドゥ アップ: ドゥ ダウン: D6 アップ: D6 ダウン: D7 アップ: D7 ダウン: D5 アップ: D5 ダウン: リターン アップ: リターン
その他の情報: バーコード スキャナー: Opticon OPL6845 USB
ありがとう
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 = "";
}
解決:
私は初心者で投稿が1つしかないため、システムは私自身の質問にさらに3時間答えることを許可しません。
まず、あなたの助けと忍耐に感謝します。
午前2時と就寝時間としてまだ完全にはテストされていません。
成功したが、可変長のMemberIDの問題に遭遇した私の更新に続きます。私は今、以下のコードでそれを克服しました:
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 つの非常に優れたソリューションをありがとうございました。私の場合はうまくいきませんでした-おそらく私自身または私のエラー/理解できない、またはスキャナーのタイプが原因です。