Domanda

Ambiente

  • Windows XP x32 Visual Studio 2005 Standard Edition
  • Honeywell Dolphin 9500 con sistema operativo Windows Mobile 2003 (Pocket PC 2003)
    • Con costruito in scanner di codici a barre e B & W della macchina fotografica
    • Usando il loro SDK situata qui .
  • .NET Compact Framework 1.0 SP3 e .NET Framework 1.1
  • Uso VC #

Obiettivo

Sto tentando di creare un'applicazione che permette a un individuo per la scansione di un codice a barre e poi catturare un'immagine. Queste cose non dovrebbero accadere simultaneamente. L'utente deve essere in grado di controllare due volte la scansione del codice a barre, poi passare la parte dell'applicazione che immagine maniglie cattura.


Problema

I numeri di riga fa riferimento il mio codice nel friendpaste link nella sezione codice qui sotto.

Ho due gestori di eventi in atto: una per l'evento decodifica dal controllo dello scanner di codici a barre, e uno a invocare il controllo di acquisizione delle immagini tramite un evento KeyDown. Il controllo di decodifica proprio evento / gestore DecodeEventHandler e un set di chiavi grilletto con un'enumerazione (lns 201 e 202). Il controllo delle immagini, però, non lo fa. I suoi stati di documentazione che la forma deve avere un gestore di eventi KeyDown (ln 120) e l'enumerazione chiave di attivazione (ln 178). Su esecuzione dell'applicazione (senza SelectedIndexChanged [ln 76] gestore di eventi in posizione), lo scanner di codici a barre funziona grande, ma la commutazione alla scheda (o forma, come ho cercato moduli separati), con il controllo cattura di immagini e colpire il tasto di attivazione del dispositivo (SCAN in questo caso), induce il palmare per agire come è ancora la scansione di un codice a barre (luci rosse si accendono, punti luce verde è spettacolo, bip quando incontra un codice a barre) invece del comportamento visualizzati normalmente quando si utilizza il controllo delle immagini (senza luci, o le luci bianche come un lampo).


Le cose che mi hanno cercato

  • ATTENZIONE: Se rimuovo il controllo decodifica dall'applicazione, i lavori di controllo dell'immagine. Se costruisco un'applicazione separata con il solo controllo di immagine, funziona.
  • ho messo un punto di interruzione alla linea 210 e ha scoperto l'evento KeyDown non viene mai essere colpiti. A questo punto ho cercato di separare in qualche modo i gestori di eventi o controlli quindi introdotto il gestore di eventi SelectedIndexChanged per mio controllo scheda e all'accensione alla scheda con il controllo appropriato, ho provato a rimuovere gestori di eventi. Sono stato in grado di rimuovere il gestore DecodeEvent ma era ancora in grado di colpire il KeyDown delegato del gestore eventi che ho scritto.
  • Entrambi i controlli decodifica e immagini da SDK di Honeywell hanno eventi "Disconnect", che (per citare la documentazione) "Disconnect dal motore di scansione". Così ho provato a scollegare e ricollegare i controlli sulla base di scheda che mi è stato il passaggio a ma senza successo in questo.
  • Inoltre ho letto da qualche parte che gli eventi Form possono a volte essere interrotto se il modulo non è più attivo. Così ho implementato il Form.LostControl evento / gestore e mettere in this.Focus () per tornare attenzione alla forma, ma senza alcun risultato.
  • Ho eseguito su più persone che suggeriscono KeyPreview = true e movimentazione / delegando gli eventi a livello di modulo. Sembra che il .NET Compact Framework versione 1 non implementa questo come i miei oggetti Form avere nessun membro KeyPreview.
  • Nel enum TriggerKey (esempio alla riga 202) v'è un enum per il tasto Invio sul dispositivo. Ho provato il cablaggio che fino al controllo delle immagini, e la scansione fino al controllo decoder, ma era ancora in grado di colpire l'evento KeyDown.

Codice

http://friendpaste.com/355cQOCghvPkE5YR29lthO

ho postato il codice come li friendpastenk perché è un po 'lungo (~ 230 linee). Fatemi sapere se devo sufficiente includere qui.


Hai bisogno di ulteriori informazioni?

Chiedi via e io farò del mio meglio!

avrei etichettato questa Honeywell Dolphin 9500, ma io sono un nuovo utente.

È stato utile?

Soluzione 3

ho scoperto che se cambio il TriggerKey a TK_ENTER (un altro valore nella enum triggerkey), posso interagire con il controllo delle immagini senza problemi. Ora ho solo bisogno di trovare un modo per catturare che entrano premere il tasto per mantenerlo dal fare qualcosa di strano.

Grazie per tutto l'aiuto!

Altri suggerimenti

La ragione per cui penso che non si può ottenere al gestore KeyDown è che quello che è per il TabControl1_IndexChanged è un System.EventHandler che è una forma generica del KeyDown.

Prova a fare qualcosa del genere e vedere se sta recuperando la 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
   }

}

Questo è un po 'di un hack, ma penso che funzionerà. Set AllKeys( true );. Questo dovrebbe garantire che l'applicazione cattura qualsiasi tastiera, premere.

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

Informazioni generali AllKeys: http://windowsteamblog.com/windows_phone/b/windowsphone/archive/2009/07/14/just-say-no- to-GAPI-what-you-need-to-know-about-AllKeys-e-input-management.aspx

Sembra che il controllo di decodifica sta inghiottendo il messaggio è necessario. Si potrebbe provare a contattare il supporto degli sviluppatori HHP. Se hanno un forum di supporto degli sviluppatori on-line che può funzionare anche. Come test, che cosa succede se si inizia commentando le linee 192-202? Fa una di quelle linee di causare il vostro evento KeyDown per smettere di lavorare?

-PaulH

Modifica

L'imageControl e decodeControl sia accettare un parametro TriggerKey. Che suona come si aspettano di fare l'evento KeyPress se stessi la gestione.

Prova questo: hanno solo uno di quelli un'istanza alla volta a seconda di ciò che scheda si è in. Sbarazzarsi del codice di gestione Form1_KeyDown tutti insieme (compresi i AllKeys). Vedere se funziona.

In alternativa, si può ancora uccidere il vostro gestore Form1_KeyDown, ma mantenere entrambi i controlli proprio come sono e farlo nel vostro gestore tabControl1_SelectedIndexChanged invece:

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

Ora solo uno di loro sarà guardando il pulsante di scansione a seconda di ciò che scheda si è in.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top