【问题标题】:Action the keypress method after the key is typed键入键后操作 keypress 方法
【发布时间】:2009-07-02 23:09:05
【问题描述】:

我正在对文本框的 KeyPress 事件执行一个方法,但该方法正在运行在键实际输入到框中。

如果我使用 KeyUp,我会得到我正在寻找的行为,除了软键上的 KeyUp 触发器以及标准字符,这对我来说不是特别有用。

我可以让 KeyPress 在将密钥输入框中后运行吗?或者我可以轻松让 KeyUp 忽略软键吗?

【问题讨论】:

    标签: c# textbox keypress


    【解决方案1】:

    好吧,您可以在 KeyPress 事件中记住 keychar,并使用记住的字符在 KeyUp 中执行所有必要的逻辑。

    【讨论】:

    • 当 KeyUp 被触发时,文本框已经包含了按下的字符。我想我可以在 KeyPress 中连接文本框字符串和 keychar,以便代码处理正确的值。
    • 嗯,这是可能的,但比你想象的更难:光标可以在文本中间(你需要插入字符),文本框中可以有选择(char替换选择),你必须正确处理控制字符(制表符、退格键等)。也许您可以更新您的问题,并告诉我们您想要达到的最终结果是什么?
    【解决方案2】:

    在您的按键事件中,您可以将textbox.Text 和e.KeyChar 连接成一个新字符串并处理这个新字符串。

    private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {    
        string newString = textBox1.Text + e.KeyChar.ToString();
        // Process newString
        // If after processing you do not wish to undo the typed letter do 
        // e.Handled = true;
    }
    

    【讨论】:

    • 嗯,如果按下键时光标在文本框文本的中间怎么办?
    【解决方案3】:

    将 keyUp 与 as 代码一起使用:

    private void textBox1_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e)
    {
        //only do things when an alphabetical character is typed
        if ((e.KeyCode >= Keys.a) && (e.KeyCode <= key.z) ||
            (e.KeyCode >= Keys.A) && (e.KeyCode <= key.Z))
        {
            // do your thing
        }
    }
    

    您当然也可以检查其他字符,例如 .等等

    【讨论】:

      【解决方案4】:

      您也可以从textbox 控件尝试TextChanged 事件。

      【讨论】:

        猜你喜欢
        • 2011-12-14
        • 1970-01-01
        • 2013-10-21
        • 2016-02-22
        • 1970-01-01
        • 1970-01-01
        • 2012-04-03
        • 2013-03-03
        • 2012-09-25
        相关资源
        最近更新 更多