【问题标题】:Winform RichTextBox get last character entered using c#Winform RichTextBox获取使用c#输入的最后一个字符
【发布时间】:2013-08-08 14:43:26
【问题描述】:

我正在使用以下代码提取最后一个字符(刚刚键入的字符),使用以下代码

 private string GetTypedChar()
    {
        string currentChar = "";
        int i = rtfText.SelectionStart; 
        if (i > 0)
        {
            currentChar = rtfText.Text.Substring(i-1, 1);
            MessageBox.Show(i+":"+currentChar);
        }
        return currentChar;
    }

但这给了我错误的结果。如果输入的单词是“RS”,按 R 后消息框显示 1:(空白),然后键入 S 消息框显示 2:R 如何做到这一点?

【问题讨论】:

  • 听起来您正在使用的事件是在处理输入之前而不是之后触发。
  • RichTextBox 的KeyDown 事件
  • 那么 e.KeyCode 不是最后一个字符(在其写入之前 - 这就是您看不到它的原因)

标签: c# winforms richtextbox


【解决方案1】:

获取最后输入的字符。你可以处理keyup事件

private void richTextBox1_KeyUp(object sender, KeyEventArgs e)
    {
        char last = (char)e.KeyValue;
    }

您可以获得富文本框的最后一个字符

string lastCharacter = rtfText.Text.SubString(rtfText.Text.Length - 1,1);

char last = rtfText.Text[rtfText.Text.Length - 1];

【讨论】:

  • SelectionStart 确保它是从插入点开始的最后一个字符,而不是文档的最后一个字符
【解决方案2】:

重要的问题是您何时执行该代码。听起来您订阅了“KeyDown”事件。到引发此事件时,表单尚未处理击键 --> 因此您看不到更改。您可以使用KeyUp 事件。当它被触发时,您的控件具有更改的上下文。

但是,如果新角色不是最后一个,这对您没有帮助。用户可以更改粗略的位置并键入字符。然后新字符位于文本中间的某个位置。这可以通过实际检查 哪个 键被按下来解决。此信息在KeyEventArgs 参数中。

【讨论】:

    【解决方案3】:

    您可以完全消除 GetTypedChar() 并订阅 KeyPress 事件。

    请注意,如果您需要该信息,这不会为您提供角色的位置。

    private void richTextBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        MessageBox.Show(string.Format("Last char typed: {0}", e.KeyChar));
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-29
      • 2020-03-23
      • 2020-06-04
      • 2015-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多