2016-07-20 7 views
0

私はカスタムテキストボックスを作成しました。これは、RFIDリーダー(HID IDで定義されています)からの入力を受け入れることができません。私はHID IDを持っている、私は2つのイベントがある、私は設定するプロパティがありますが、それは動作していません。イベントハンドラ内の共有変数C#

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

問題は次のとおりです:最初の発射イベントは_kblistener_KeyPressed、および必要であれば、それは本当の取り扱い設定しますが、コードはONKEYPRESSになったとき、処理は常にfalseです。ここで

はコードがあります。私はRawInput_dllを使ってHID IDを取得しています。

+0

あなたは他に何もそのイベントハンドラを活性化されていないことを確認するには、 '他の取り扱い= false'のにブレークポイントを設定しましたか? –

+0

@EricJ。あなたの答えをありがとう。はい、私はすでにそれをテストしました。何も起こりません:( – RAPTOR

+0

をその後、おそらくあなたはクラスの同じインスタンスを使用していない。あなたはSTextBox _newつ以上を(持っているかどうかを確認してください)_周りにあなたのコードで。 – Steve

答えて

0

大丈夫です。 Hans Passantのおかげで、問題は非静的変数であることが分かりました。 _kblistener_handleを静的に変更した後、すべてが正常に動作し始めました。ここで

は、作業コードです:

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); 
    } 
} 
関連する問題