C# WinForm + Scanner de code à Barres d'entrée, TextChanged Erreur

MISE À JOUR: LA SOLUTION À LA FIN


J'ai un Winform, label1 affiche quelques infos retournées à partir d'une Recherche SQL à l'aide de l'entrée (MemberID) reçu de scanner de code à barres via txtBoxCatchScanner.

Scénario est que les gens glisser leur MemberID Cartes sous le scanner, pour passer à travers la réception et la Winform automatiquement de faire une Recherche sur ce MemberID et la restitution de leurs infos telles que "l'Expiration de l'Adhésion", etc sur le réceptionniste de PC qui a la winForm dans un coin de son bureau.

J'ai le Code ci-Dessous fonctionne correctement sur la première utilisation (par exemple. la première personne)

Le nombre MemberID, par exemple 00888 vient dans la zone de texte, ADO.NET extrait les données à partir de SQL et affiche correctement.

une chose à noter, peut-être, le curseur est à la fin de la memberID: 00888|

Tout bon jusqu'ici, ALORS:

lors de glissement 2 (eg. la prochaine personne) arrive

leur nombre (disons, 00999) est mis sur la fin de la première dans le txtBox par exemple: 0088800999 alors, naturellement, quand TextChanged Feux de il recherche 0088800999 au lieu de 00999 ....

J'ai essayé:

txtBoxCatchScanner.Clear();

et

txtBoxCatchScanner.Text = "";

et
le rechargement de la forme

à la fin de mon code pour "rafraîchir" la zone de texte

mais je suppose qu'ils déclenchent l'Événement TextChanged

Comment puis-je recentrer ou ... effacer l'ancien numéro et le curseur au début de la txtBox après le balayage a fait ses trucs...

Je suis un débutant donc je suis sûr que le code ci-dessous est à peu de la merde....

Mais si quelqu'un a le temps, s'il vous plaît laissez-moi savoir comment le fixer à faire ce que je veux.

Mise à JOUR:

Ok après beaucoup d'expérimentation, j'ai réussi à obtenir cette 1/2 de travail maintenant, j'espère que quelqu'un plus d'expérience peut m'aider pour la fin! 😛

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

AFIN de numériser 1, dire 00888 , alors que se mis en évidence, analyse 2 , dire 00997 ... doux! remplace (pas ajoute) 00888 et le fait de la chose ... scan 2 0011289 ... DOH!!

Problème: tous les codes à barres sont à 5 chiffres! ils sont aléatoires, les longueurs!! Membre de l'ID de gamme à partir de 2 chiffres (par exemple. 25) à 10 chiffres, et permettrait de croître dans le futur...

Edit: quelque Chose que j'ai découvert c'est que les codes-barres sont lus comme individu touches. Je pense que c'est pourquoi la réponse 1 ci-dessous ne fonctionne pas et bien que le grand probmlems:

par exemple avec 00675 l'entrée (?de sortie) à partir du scanner est:

Bas: Ne
Jusqu': Ne
En Bas: Ne
Jusqu': Ne
En Bas: D6
Jusqu': D6
En Bas: D7
Jusqu': D7
En Bas: D5
Jusqu': D5
en bas: Retunn
Jusqu': Retour

autres infos: scanner de code à barres est: un Opticon OPL6845 USB

Grâce

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 = "";
}

SOLUTION:

Le Système ne me permet pas de répondre à ma propre question pour un autre 3 heures, comme je suis un newbie 1 seul post, il en sera de le mettre ici:

D'abord merci à tous pour votre aide et votre Patience.

J'Ai enfin trouvé une solition, pas entièrement testé encore que ses 2h du matin et l'heure du coucher.

suivant le long de mes mises à jour où j'ai eu du succès, mais a frappé la longueur variable de MemberID problème. J'ai maintenant à surmonter qu'avec le Code ci-dessous:

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;
}
}

Je vais l'ajouter à mon précédent "vrai" code et test le matin
Mais à ce stade, est en train de faire exactement ce que je veux! =]

Mise à jour: Testé .. fonctionne exactement ce qu'il fallait:

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

Espère que ça aide quelqu'un dans le futur!! 🙂

Merci encore pour les 2 très bonnes solutions, je peux voir comment ils travaillent, et beaucoup appris.
Ça n'a pas fonctionné dans mon cas - qui est probablement dû à moi-même ou mon erreur/de ne pas comprendre, ou type de scanner.

  • Gönül: pourquoi avez-vous augmentation l'indentation quand vous pourriez avoir enlevé?
  • Le code qui va avoir le problème doit être le code qui permet d'affecter le texte de la textbox, pourriez-vous nous montrer un peu plutôt que le texte modifié de l'événement?
  • P. s aussi dans la version finale d'autre, vous pouvez définir le texte de l'alerte à pas un nombre, mais vous ne faites pas l'étiquette visible
  • Désolé d'avoir aucune idée de ce que tu veux dire à propos de la mise en retrait... RhysW ... il n'y a pas d'autre code, à l'exception de la part du public void FormScanner_Load et Public FormScanner()
  • Ok dans quel cas pouvez-vous m'indiquer la section de code où vous définissez la zone de texte du texte à 00888 etc s'il vous plaît?
  • le texte de la textbox vient de le scanner de code-barres et est cette partie: //EST UN NUMÉRO de membre.MemberID = Convert.ToInt32(txtBoxCatchScanner.Texte); ... si ça peut aider
  • où est le code où vous le faites par exemple txtBoxCatchScanner.Texte = 00889; ou bien est-ce qui se passe à un tiers?
  • J'ai enlevé le tiret 🙂
  • les membres de code à barres est utilisé (par exemple. 00889) scanner d'entrée va à txtBoxCatchScanner qui déclenche TextChanged ... txtBoxCatchScannerText obtenir de son apport du scanner de code à barres .....
  • ok, donc il obtient son entrée à partir du scanner, pouvez-vous me montrer le code où vous obtenez les informations de le scanner et de le mettre dans la zone de texte, je ne peux pas vous aider à résoudre le problème sans voir le code
  • il n'y a pas d'autre code. scanner va dans le port usb... scanner le code à barres ... de codes-barres apparaît dans txtbox ... le code que j'ai posté ci-dessus est complète, il y a tout le code... en dehors de l'espace de noms, de chargement de la page etc.. il n'y a pas d'autre code. désolé, merci, de toute façon.
  • Ok, mais le code-barres ne marche pas ne marche pas apparaître comme par magie dans la zone de texte, quelque part, en quelque sorte, d'un morceau de code mise en place du texte dans cette zone de texte, est-ce que votre code de définir la zone de texte pour être l'un des numéros ou est-ce un tiers formulaire windows?
  • Soner & Uwe: merci pour ça, voir ce que u veux dire maintenant 😛 ... désolé à ce sujet, la première fois le poste.
  • merci! 🙂 semble beaucoup mieux
  • Oui il le fait, si le scanner est configuré comme un clavier USB, le plus simple scanners de codes à barres sont par défaut.
  • Je viens de lire que le membre Id de longueur variable: Qu'advient-il si vous avez un membre 12 et un membre 121? Si vous avez un événement après chaque personnage (ce qui est le cas avec la TextChanged événement - le scanner fonctionne comme taper un caractère après l'autre, de sorte qu'après chaque chiffre, TextChanged est déclenchée), vous ne verrez jamais membre 121, que vous vous arrêtez après la découverte d'membre 12. Ne pas utiliser TextChanged! Voir mon approche pour une propreté et une solution de travail.
  • j'essayais de disscern s'il avait accès au code qui l'a fait ou non, et non, il n'tmagically apparaître, il y a le code, et j'essayais de savoir si il y avait accès
  • Oui, il y a le code. Dans le scanner pilote du clavier, ou le générique de Windows clavier USB pilote qui est le plus probablement utilisé pour manipuler ces appareils.
  • justement! Je savais pas s'il avait accès à ce bien d'où mes nombreuses questions 🙂
  • C'est juste que certaines personnes ont tendance à oublier d'émulation du clavier lorsque vous travaillez avec COM connecté scanners trop longtemps. 🙂
  • Très Vrai, aussi la solution que vous avez fourni est de très bonne qualité, permet d'éviter plus de problèmes que de simplement l'une adressée

InformationsquelleAutor user1994097 | 2013-01-23