キーが押されたときにコントロールのテキストが変更されるかどうかを判断する必要があります。Ctrl+Z
またはのようなキーの押下を無視するEsc
必要がありますが、テキストが変更された場合にどのキーが押されたかを知る必要があります。
イベントでそれを知る方法はありますか?KeyDown
現在、フラグを使用して on をオンにし、 onKeyDown
をチェックしていますTextChanged
が、もっと良い方法があるかどうか疑問に思っていましたか?
キーが押されたときにコントロールのテキストが変更されるかどうかを判断する必要があります。Ctrl+Z
またはのようなキーの押下を無視するEsc
必要がありますが、テキストが変更された場合にどのキーが押されたかを知る必要があります。
イベントでそれを知る方法はありますか?KeyDown
現在、フラグを使用して on をオンにし、 onKeyDown
をチェックしていますTextChanged
が、もっと良い方法があるかどうか疑問に思っていましたか?
あなたが探していますChar.IsControl
private Keys lastKey = Keys.None;
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
lastKey = e.KeyData;
}
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (Char.IsControl(e.KeyChar))
{
e.Handled = true;//prevent this key press
Keys pressedKey = this.lastKey;
//Do your stuff with pressedKey here
}
}
テキスト ボックスでイベントをキャッチし、KeyPress
それが有効なキーである場合は設定e.handled = false
し、不適切なキーである場合は設定しe.handled = true
ます。
例:ここ
private void keypressed(Object o, KeyPressEventArgs e)
{
// The keypressed method uses the KeyChar property to check
// whether the ENTER key is pressed.
// If the ENTER key is pressed, the Handled property is set to true,
// to indicate the event is handled.
if (e.KeyChar == (char)Keys.Return)
{
e.Handled = true;
}
}
charを生成するキーもありますがControl
、テキストも変更しますBackSpace
。別の問題があります。textbox
が空の場合、(たとえばBackSpace
) を押してもテキストは変更されません。そのため、以前のルールに違反しています。そのControl
ため、キャラクターは対処してルールを構築するのに素朴ではありません。
さらに、または類似のケースを検討してCtrl + C
くださいShift + Insert
。「C」キーはどこか魅力的です。' C
' を押すとテキストが変更されるように見えますが、 で押された場合'Ctrl'
、実際にはテキストは変更されません。を確認する必要がありModifiers
ます。
flag
おそらく、対処すべき他の困難を見つけることができるでしょう。私は、このアプローチで十分だと思います。