我有一个LeftToRight RichTextBox。
我正在捕捉KeyUp
事件并使用RichTextBox中的SelectedText
进行一些修改。
但是我遇到了一个奇怪的问题。替换Selected Text后,RichTextBox的方向变为RightToLeft。
在CTRL + R之前
后
这是我的代码(只有CTRL + R导致问题):
private void tbSource_KeyUp(object sender, KeyEventArgs e)
{
string appendTag, selectedText;
appendTag = string.Empty;
if (e.Control)
{
selectedText = tbSource.SelectedText;
switch (e.KeyCode)
{
case Keys.U:
appendTag = @"<U>{0}</U>";
break;
case Keys.B:
appendTag = @"<B>{0}</B>";
break;
case Keys.R:
appendTag = @"<ruby>{0}<rt></rt></ruby>";
break;
case Keys.T:
appendTag = @"( )";
break;
default:
appendTag = @"";
break;
}
if (e.KeyCode == Keys.U || e.KeyCode == Keys.B || e.KeyCode == Keys.R)
{
selectedText = string.Format(appendTag, selectedText);
tbSource.SelectedText = selectedText;
}
else {
tbSource.AppendText(appendTag);
}
}
}
WinForms RichTextBox有一些预定义的键盘快捷键,CTRL + R是将文本方向改为RightToLeft的键盘快捷键。
您可以将属性ShortcutsEnabled设置为false并删除所有键盘快捷键(这包括CTRL + C和CTRL + V等有用的快捷键),或者您可以将KeyEventArgs属性SuppressKeyPress的代码设置更改为true。
但是你需要使用KeyDown事件处理程序而不是KeyUp(我认为KeyUp太晚无法抑制任何事情)
private void tbSource_KeyDown(object sender, KeyEventArgs e)
{
.......
case Keys.R:
appendTag = @"<ruby>{0}<rt></rt></ruby>";
e.SuppressKeyPress = true;
break;
}
键盘快捷键列表在ShortcutsEnabled属性的文档中定义
CTRL + R是默认快捷方式,可将方向更改为RightToLeft。将RichtTextBox的ShortcutsEnabled属性设置为false。有关这家酒店的更多信息,请访问here