3

キーが押されたときにコントロールのテキストが変更されるかどうかを判断する必要があります。Ctrl+Zまたはのようなキーの押下を無視するEsc必要がありますが、テキストが変更された場合にどのキーが押されたかを知る必要があります。

イベントでそれ知る方法はありますか?KeyDown現在、フラグを使用して on をオンにし、 onKeyDownをチェックしていますTextChangedが、もっと良い方法があるかどうか疑問に思っていましたか?

4

3 に答える 3

4

あなたが探しています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
    }
}
于 2013-09-24T20:29:13.587 に答える
1

テキスト ボックスでイベントをキャッチし、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;
        }
    }
于 2013-09-24T20:40:02.600 に答える
0

charを生成するキーもありますがControl、テキストも変更しますBackSpace。別の問題があります。textboxが空の場合、(たとえばBackSpace) を押してもテキストは変更されません。そのため、以前のルールに違反しています。そのControlため、キャラクターは対処してルールを構築するのに素朴ではありません。

さらに、または類似のケースを検討してCtrl + CくださいShift + Insert。「C」キーはどこか魅力的です。' C' を押すとテキストが変更されるように見えますが、 で押された場合'Ctrl'、実際にはテキストは変更されません。を確認する必要がありModifiersます。

flagおそらく、対処すべき他の困難を見つけることができるでしょう。私は、このアプローチで十分だと思います。

于 2013-09-24T20:43:43.583 に答える