Question

Environnement

  • Windows XP x32 Visual Studio 2005 Standard Edition
  • Honeywell Dolphin 9500 fonctionnant sous Windows Mobile 2003 (Pocket PC 2003)
    • Avec construit dans le scanner de codes à barres et appareil photo B & W
    • En utilisant leur SDK situé ici .
  • NET Compact Framework 1.0 SP3 et .NET Framework 1.1
  • Utilisation VC #

Objectif

Je tente de créer une application qui permet à un individu de numériser un code-barres, puis capturer une image. Ces choses ne devraient pas se produire en même temps. L'utilisateur doit être en mesure de vérifier deux fois de balayage de codes à barres, puis déplacez sur la partie de l'application qui de capture d'image poignées.


Problème

Les numéros de ligne font référence à mon code dans le lien friendpaste dans la section code ci-dessous.

J'ai deux gestionnaires d'événements en place: l'un pour l'événement de décodage de la commande du scanner de codes à barres et un contrôle pour appeler la capture d'image par un événement KeyDown. Le contrôle de décodage a son propre événement / gestionnaire DecodeEventHandler et un ensemble de touche de déclenchement avec un ENUM (LNS 201 et 202). Toutefois, le contrôle de l'image, ne fonctionne pas. Ses états de documentation que le formulaire doit avoir un gestionnaire d'événements KeyDown (ln 120) et la ENUM touche de déclenchement (ln 178). Lors de l'exécution de l'application (sans SelectedIndexChanged [En 76] Le gestionnaire d'événements en place), le scanner de codes à barres fonctionne très bien, mais passage à l'onglet (ou le formulaire, comme je l'ai essayé des formulaires séparés, bien), avec le contrôle de la capture d'image et frapper la gâchette clé sur l'appareil (SCAN dans ce cas) provoque l'ordinateur de poche d'agir comme il scanne toujours un code à barres (feux rouges se allument, la lumière objectif vert est de montrer, émet un signal sonore lors de la rencontre d'un code à barres) au lieu du comportement normalement affichés lors de l'utilisation le contrôle de l'image (pas de lumières, ou lumières blanches comme un flash).


Ce que j'ai essayé

  • IMPORTANT: Si je supprime le contrôle de décodage de l'application, les travaux de contrôle d'image. Si je construis une application séparée avec seulement le contrôle de l'image, cela fonctionne.
  • Je mets un point de rupture à la ligne 210 et a découvert l'événement KeyDown n'est jamais d'être frappé. A ce stade, j'ai essayé de séparer en quelque sorte les gestionnaires d'événements ou des contrôles si j'ai présenté le gestionnaire d'événements SelectedIndexChanged pour mon contrôle onglet et lors du passage à l'onglet avec la commande appropriée, j'ai essayé de supprimer des gestionnaires d'événements. J'ai pu enlever le gestionnaire de DecodeEvent mais était encore incapable de frapper le délégué de gestionnaire d'événements KeyDown je l'ai écrit.
  • Les deux Décoder et commandes de l'image SDK de Honeywell ont des événements « Disconnect » qui (pour citer la documentation) « Se déconnecter du moteur d'analyse ». J'ai donc essayé débranchant et rebranchant des contrôles basés sur l'onglet dans lequel je passer à, mais n'a pas réussi à aussi.
  • J'ai lu aussi quelque part que les événements formulaire peuvent parfois être perturbés si le formulaire perd le focus. Donc je mis en œuvre l'événement Form.LostControl / gestionnaire et mettre en this.Focus () pour revenir focus sur la forme, mais sans succès.
  • J'ai rencontré plusieurs personnes suggérant KeyPreview = true et la manipulation / déléguer les événements au niveau de la forme. Il semble que le .NET Compact Framework version 1 ne met pas en œuvre ce que mes objets de formulaire ont aucun membre de KeyPreview.
  • Dans le ENUM de TriggerKey (par exemple à la ligne 202), il y a un ENUM pour la touche Entrée du périphérique. J'ai essayé câblage jusqu'à la commande d'image et numériser jusqu'à la commande du décodeur, mais était encore incapable de frapper l'événement KeyDown.

code

http://friendpaste.com/355cQOCghvPkE5YR29lthO

J'affiché le code comme friendpaste link parce qu'il est un peu long (~ 230 lignes). Permettez-moi de savoir si je devrais inclure ici.


Vous avez besoin d'informations supplémentaires?

Demandez loin et je ferai de mon mieux!

Je l'ai marqué ce Honeywell Dolphin 9500, mais je suis un nouvel utilisateur.

Était-ce utile?

La solution 3

Je trouve que si je change le TriggerKey à TK_ENTER (une autre valeur dans le enum triggerkey), je peux interagir avec le contrôle de l'image sans aucun problème. Maintenant, je juste besoin de trouver un moyen de capture qui Enter appuyer sur la touche pour l'empêcher de faire quelque chose de bizarre.

Merci pour toute l'aide!

Autres conseils

La raison pour laquelle je pense que vous ne pouvez pas obtenir au gestionnaire de KeyDown est que celui qui est pour le TabControl1_IndexChanged est un System.EventHandler qui est une forme générique du KeyDown.

Essayez de faire quelque chose comme ça et voir si elle attrape le KeyDown

private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
{
   if (sender is Form1 && e is KeyEventArgs)
   {
       Form1_KeyDown(sender,  (KeyEventArgs) e);
   }
   else
   {
       //Do other stuff
   }

}

Ceci est un peu un hack, mais je pense que cela va fonctionner. Set AllKeys( true );. Cela devrait vous assurer que votre application capture toute la presse du clavier.

AllKeys signature P / Invoke: http://blogs.msdn.com/b/mikefrancis/archive/2009/03/28/porting-gapi-keys-to-wm-6-1- et 6-5.aspx

Informations générales AllKeys: http://windowsteamblog.com/windows_phone/b/windowsphone/archive/2009/07/14/just-say-no- à gapi-what-you-need-know-about-à-AllKeys-et-entrée-management.aspx

Il semble que le contrôle de décodage est avalait le message dont vous avez besoin. Vous pouvez essayer de contacter le support développeur HHP. Si elles ont un forum de soutien aux développeurs en ligne qui peut fonctionner aussi. En guise de test, ce qui se passe si vous commencez à commenter les lignes 192-202? Est-ce que l'une de ces lignes la cause de votre événement keydown à un travail d'arrêt?

-PaulH

Modifier

Le imageControl et decodeControl acceptent tous deux un paramètre TriggerKey. Cela sonne comme ils attendent à faire l'événement KeyPress se manipuler.

Essayez ceci: seulement avoir un de ces instancié à un moment en fonction de ce que vous êtes sur l'onglet. Débarrassez-vous du code de gestion des Form1_KeyDown tous ensemble (y compris les AllKeys). Voir si cela fonctionne.

Sinon, vous pouvez toujours tuer votre gestionnaire de Form1_KeyDown, mais garder les deux contrôles comme ils sont et faire dans votre gestionnaire de tabControl1_SelectedIndexChanged à la place:

private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
{
    if (this.tabControl1.SelectedIndex == 0)
    {
        this.decodeControl1.TriggerKey = HHP.DataCollection.Common.TriggerKeyEnum.TK_ONSCAN;
        this.imageControl1.TriggerKey = null;
    }
    else if (this.tabControl1.SelectedIndex == 1)
    {
        this.decodeControl1.TriggerKey = null;
        this.imageControl1.TriggerKey = TriggerKeyEnum.TK_ONSCAN;
    }
}

Maintenant que l'un d'entre eux sera en regardant le bouton de numérisation en fonction de ce que vous êtes sur l'onglet.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top