在RichTextBox中设置斜体时,阻止标签

时间:2019-02-22 11:37:44

标签: c# .net winforms richtextbox

我正在使用RichTextBox为自己制作Notes应用程序,但是字体“样式”出现了一些问题。 我绑定 Ctrl + I 将所选文本设置为斜体,这是可行的。但是由于某种原因,无论何时我这样做,它都会添加一个标签,删除所有选中的文本。 通过添加e.SuppressKeyPress = true可以解决我遇到这个问题的唯一情况。但这对我也不起作用。

private void txbMain_KeyUp(object sender, KeyEventArgs e)
{
    if((e.KeyCode==Keys.B && e.Modifiers == Keys.Control) || (e.KeyCode==Keys.F && e.Modifiers==(Keys.Control | Keys.Shift)))
    {
        FontHelper.Bold(this);
    }
    else if(e.KeyCode==Keys.I && e.Modifiers == Keys.Control)
    {
        if (txbMain.SelectionFont != null)
        {
            e.SuppressKeyPress = true;
            System.Drawing.Font currentFont = txbMain.SelectionFont;
            System.Drawing.FontStyle newFontStyle;
            if (txbMain.SelectionFont.Italic == true)
            {
                newFontStyle = FontStyle.Regular;
            }
            else
            {
                newFontStyle = FontStyle.Italic;
            }
            txbMain.SelectionFont = new Font(
               currentFont.FontFamily,
               currentFont.Size,
               newFontStyle
            );
        }
    } 
} 

1 个答案:

答案 0 :(得分:2)

CTRL + I组合似乎是richtextbox进入选项卡的默认功能。即使您在richtextbox上没有任何代码或事件,您的文本也将被替换。因此,问题在于,在使用默认功能后,您的事件确实会触发,并且一旦代码达到您的文本格式,文本就会被删除。

最简单的解决方案是使用KeyDown事件而不是KeyUp。