事件处理程序C#中的共享变量

时间:2016-07-20 19:27:40

标签: c# variables events custom-controls

我创建了一个自定义TextBox,当它来自RFID阅读器(用HID ID定义)时,能够不接受输入。我有HID ID,我有两个事件,我有设置的属性,但它没有工作。

以下是代码:

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,如果需要,它设置处理true,但是当代码到达OnKeyPress时,处理始终为false。我使用RawInput_dll获取HID ID。

1 个答案:

答案 0 :(得分: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);
    }
}