2016-07-20 29 views
0

Ich habe eine benutzerdefinierte TextBox mit der Möglichkeit erstellt, keine Eingabe zu akzeptieren, wenn sie von einem RFID-Lesegerät stammt (definiert mit HID ID). Ich habe die HID ID, ich habe die zwei Ereignisse, ich habe die Eigenschaft zu setzen, aber es funktioniert nicht. HierFreigegebene Variable in Event-Handlern C#

ist der Code:

public partial class STextBox : TextBox 
{ 
    private RawInput _kblistener; 
    private bool _handle = false; 

    public STextBox() 
    { 
     _allowRfid = false; 
     _kblistener = new RawInput(Handle, true); 
     _kblistener.KeyPressed += _kblistener_KeyPressed; 
    } 

    private void _kblistener_KeyPressed(object sender, RawInputEventArg e) 
    { 
     if (e.KeyPressEvent.DeviceName == Config.RFIDreader) Handling = true; 
     else Handling = false; 
    } 

    private bool Handling 
    { 
     get { return _handle; } 
     set { _handle = value; } 
    } 

    protected override void OnKeyPress(KeyPressEventArgs e) 
    { 
     e.Handled = Handling; 
     base.OnKeyPress(e); 
    } 
} 

Das Problem ist: die erste Feuerungsereignis _kblistener_KeyPressed ist, und es setzt Handhabung wahr, wenn nötig, aber wenn der Code zu OnKeyPress bekommt, Handhabung ist immer falsch. Ich verwende RawInput_dll, um die HID ID zu erhalten.

+0

Haben Sie einen Haltepunkt setzen auf 'else = false' Handhabung sicher nichts anderes zu machen, ist die Aktivierung, dass Event-Handler? –

+0

@EricJ. Vielen Dank für Ihre Antwort. Ja, ich habe es bereits getestet. Nichts passiert :( – RAPTOR

+0

Dann verwenden Sie wahrscheinlich nicht die gleiche Instanz der Klasse. Überprüfen Sie, ob Sie mehr als eine _new STextBox() _ in Ihrem Code haben. – Steve

Antwort

0

In Ordnung. Also habe ich dank Hans Passant herausgefunden, dass das Problem die nicht statischen Variablen waren. Nachdem ich _kblistener und _handle zu statisch geändert habe, fing alles an zu arbeiten, wie ich erwartete.

Hier ist der Arbeitscode:

public partial class STextBox : TextBox 
{ 
    private bool _allowRfid; 
    private static RawInput _kblistener; 
    private static bool _handle = false; 

    public STextBox() 
    { 
     _allowRfid = false; 
     _kblistener = new RawInput(Handle, true); 
     _kblistener.KeyPressed += _kblistener_KeyPressed; 
    } 

    private void _kblistener_KeyPressed(object sender, RawInputEventArg e) 
    { 
     if (e.KeyPressEvent.DeviceName == SetUp.RfidDevID) Handling = true; 
     else Handling = false; 
    } 

    public bool AllowRFID 
    { 
     get { return _allowRfid; } 
     set { _allowRfid = value; } 
    } 

    private static bool Handling 
    { 
     get { return _handle; } 
     set { _handle = value; } 
    } 

    protected override void OnKeyPress(KeyPressEventArgs e) 
    { 
     if (!_allowRfid) e.Handled = Handling; 
     base.OnKeyPress(e); 
    } 
}