Frage

Umfeld

  • Windows XP X32 Visual Studio 2005 Standard Edition
  • Honeywell Dolphin 9500 Ausführen Windows Mobile 2003 (Pocket PC 2003)
    • Mit integriertem Barcode -Scanner und B & W -Kamera
    • Mit ihrem SDK gelegen hier.
  • .NET Compact Framework 1.0 SP3 und .NET Framework 1.1
  • Verwenden Sie VC#

Tor

Ich versuche, eine Anwendung zu erstellen, mit der eine Person einen Barcode scannen und dann ein Bild erfasst. Diese Dinge sollten nicht gleichzeitig passieren. Der Benutzer sollte in der Lage sein, den Barcode -Scan zu überprüfen und dann auf den Teil der Anwendung zu wechseln, das die Bildaufnahme behandelt.


Problem

Zeilennummern verweisen auf meinen Code in der Friendpaste Link Im Abschnitt Code unten.

Ich habe zwei Event -Handler: eine für das Decodes -Ereignis über die Steuerung des Barcode -Scanners und eine, die über ein Schlüsseldown -Ereignis die Bildaufnahmesteuerung aufgerufen hat. Die Decodes Control verfügt über ein eigenes Ereignis/Handler -DecodeEventHandler und einen Triggerschlüssel mit einem Enum (LNS 201 und 202). Die Bildsteuerung tut jedoch nicht. Seine Dokumentation besagt, dass das Formular einen Keydown -Ereignishandler (LN 120) und den Trigger -Schlüssel Enum (LN 178) haben sollte. Nach dem Ausführen der Anwendung (ohne den ausgewählten INDEXCHANDED [LN 76] Ereignishandler) funktioniert der Barcode -Scanner hervorragend, wechselt jedoch auf die Registerkarte (oder das Formular, wie ich auch separate Formulare ausprobiert habe) mit der Bildaufnahmesteuerung und der Bildaufnahme -Steuerung und der Steuerung. Wenn Sie den Triggertaste auf dem Gerät drücken (in diesem Fall Scan), wird der Handheld so wirkt, als würde es immer noch einen Barcode scannen (rote Lichter kommen auf, grünes Ziellicht wird angezeigt, piept Die Bildsteuerung (keine Lichter oder weiße Lichter wie ein Blitz).


Dinge, die ich ausprobiert habe

  • WICHTIG: Wenn ich die Decoded -Steuerung aus der Anwendung entfernen, funktioniert die Bildsteuerung. Wenn ich eine separate Anwendung nur mit der Bildsteuerung erstelle, funktioniert sie.
  • Ich habe in der Line 210 einen Break -Punkt gesetzt und herausgefunden, dass das Keydown -Ereignis nie getroffen wird. Zu diesem Zeitpunkt versuchte ich, die Ereignishandler oder -steuerungen irgendwie zu trennen, sodass ich den ausgewählten Ereignishandler für meine Registerkarte eingeführt habe. Nach dem Umschalten auf die Registerkarte mit der entsprechenden Steuerung versuchte ich, Ereignishandler zu entfernen. Ich konnte den Decodeevent -Handler entfernen, konnte aber immer noch nicht den von mir geschriebenen Delegierten von Keydown -Event -Handler treffen.
  • Sowohl die Decodes- als auch die Bildsteuerung von Honeywells SDK haben "Trennen", die (um die Dokumentation zu zitieren) "von der Scan -Engine abzahlen". Also habe ich versucht, Steuerelemente zu trennen und wieder zu verbinden, zu welcher Registerkarte ich wechselte, war aber auch in diesem Bereich nicht erfolgreich.
  • Ich habe auch irgendwo gelesen, dass Form -Ereignisse manchmal gestört werden können, wenn das Formular den Fokus verliert. Also habe ich das Formular implementiert.
  • Ich habe mehrere Personen über Tastaturen = True und die Handhabung/Delegation der Ereignisse auf Formularebene vorgeschlagen. Es wird angezeigt, dass .NET Compact Framework Version 1 dies nicht implementiert, da meine Formularobjekte kein Tastatur -Mitglied haben.
  • Innerhalb der Triggerkey Enum (Beispiel in Zeile 202) gibt es eine Enum für die Eingabetaste auf dem Gerät. Ich habe versucht, dies bis zur Bildregelung zu verkabeln, und scannte bis zur Decoder -Steuerung, konnte aber immer noch nicht auf das Schlüsseldown -Ereignis treffen.

Code

http://friendpaste.com/355cqocghvpke5yr29ltho

Ich habe den Code als Freundpaste -Link gepostet, weil er etwas lang ist (~ 230 Zeilen). Lassen Sie mich wissen, ob ich es hier einfach einschließen soll.


Benötigen Sie zusätzliche Informationen?

Fragen Sie weg und ich werde mein Bestes geben!

Ich hätte diesen Honeywell Dolphin 9500 mit einem neuen Benutzer gekündigt.

War es hilfreich?

Lösung 3

Ich fand heraus, dass ich mit der Bildsteuerung ohne Probleme mit der Bildsteuerung interagieren kann, wenn ich den Triggerkey in TK_enter ändere (ein weiterer Wert im Triggerkey -Enum). Jetzt muss ich nur noch einen Weg finden, um diese Eingabetaste zu erfassen, um zu verhindern, dass es etwas Seltsames tut.

Danke für all die Hilfe!

Andere Tipps

Der Grund, warum ich denke, du kannst nicht zur KeyDown Handler ist, dass derjenige, der für die ist TabControl1_IndexChanged ist ein System.EventHandler Welches ist eine generische Form der KeyDown.

Versuchen Sie so etwas und sehen Sie, ob es das fängt 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
   }

}

Dies ist ein bisschen ein Hack, aber ich denke, es wird funktionieren. Satz AllKeys( true );. Dies sollte sicherstellen, dass Ihre Bewerbung eine Tastaturpresse erfasst.

Allkeys P/Invoke Signature: http://blogs.msdn.com/b/mikefrancis/archive/2009/03/28/porting-gapi-keys-t-wm-6-1-and-6-5.aspx

General Allkeys Informationen: http://windowsteamblog.com/windows_phone/b/windowphone/archive/2009/07/14/just-say-no-t-gapi-what-you-need-t-nput-allkeys-input- Management.aspx

Es klingt so, als würde die Decoded Control die benötigte Nachricht schlucken. Sie können versuchen, den HHP -Entwicklerunterstützung zu kontaktieren. Wenn sie ein Online -Entwickler -Support -Forum haben, kann dies auch funktionieren. Was passiert als Test, wenn Sie die Zeilen von 192-202 abgeben? Bewirkt eine dieser Zeilen, dass Ihr Schlüsseldown -Ereignis nicht mehr funktioniert?

-Paulh

Bearbeiten

Die ImageControl und DecodeControl akzeptieren beide a TriggerKey Parameter. Das hört sich so an, als würden sie erwarten, dass sie selbst mit dem Keypress -Ereignis umgehen.

Versuchen Sie Folgendes: Lassen Sie je nach Registerkarte nur eine derjenigen sofort instanziiert. Loswerden Form1_KeyDown Umgang mit Code alle zusammen (einschließlich der Allkeys). Sehen Sie, ob das funktioniert.

Alternativ können Sie Ihre immer noch töten Form1_KeyDown Handler, aber beide Steuerungen wie sie sind und dies in Ihrem tun tabControl1_SelectedIndexChanged Handler stattdessen:

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

Jetzt wird nur einer von ihnen die Scan -Taste ansehen, je nachdem, auf welcher Registerkarte Sie sich befinden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top