我创建了一个自定义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。
答案 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);
}
}