我使用以下代码使用以下代码
提取最后一个字符(刚刚输入的字符) 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 怎么做到这一点?
答案 0 :(得分:3)
获取最后输入的字符。您可以处理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];
或
答案 1 :(得分:2)
重要的问题是 时执行该代码。听起来你订阅了'KeyDown'事件。当这个事件被提出时,关键笔划还没有被表格处理 - >所以你没有看到变化。您可以使用KeyUp
事件。当它被触发时,您的控件具有更改的上下文。
但是,如果新角色不是最后一个角色,那么这对你没有帮助。用户可以更改courser位置并键入角色。然后新角色位于文本中间的某个位置。这可以通过实际检查已按下键来解决。此信息位于KeyEventArgs
参数中。
答案 2 :(得分:1)
您可以完全取消GetTypedChar()
并订阅KeyPress
事件。
请注意,如果您需要该信息,这不会为您提供角色的位置。
private void richTextBox1_KeyPress(object sender, KeyPressEventArgs e)
{
MessageBox.Show(string.Format("Last char typed: {0}", e.KeyChar));
}