一些Alt键更改了我的RichTextBox字体

时间:2018-07-20 11:01:23

标签: c# .net winforms

我正在Windows窗体中创建一些印地语键入应用程序。

我使用过Text字体,有些字符有一些alt键控制代码,但是如果我输入其他KrutiDev010Alt+0261等其他alt键控制代码,则会显示分别章程Alt+025896ą,并将我的文本框字体更改为“ Arial”。

如何仅阻止那些更改RichTextBox字体的替代键控制代码?

2 个答案:

答案 0 :(得分:1)

这是默认行为。
RichTextBox自动找到一个备用字体来表示当前指定的字体无法处理的那些字符。
如果没有其他指示,它将使用后备字体更改Font选择。

请阅读有关RichTextBox祖先(RichEdit控件,WinForms控件派生自其的控件)的默认行为的声明:Don't change the font, dammit!
< / p>

有办法改变这种行为。至少以RichTextBox控件报告当前字体和字体选择的方式。上一篇博客文章中的C++代码是一个。

有关此主题的StackOverflow问题/答案:
How to force a Win32 RichEdit fallback to SimSun with East Asian text

但是您不必为此后退C++
请参见RichTextBox.LanguageOptionRichTextBoxLanguageOptions标志。

您可以在InitializeComponent()构造函数中的Form proc之后插入以下代码行:

richTextBox1.LanguageOption = RichTextBoxLanguageOptions.DualFont;


richTextBox1.LanguageOption = RichTextBoxLanguageOptions.DualFont | RichTextBoxLanguageOptions.UIFonts;

有一点区别。请参阅参考文档,并在您的特定上下文中测试此行为。
如果您插入当前字体未处理的Unicode符号,则总是可以进行后备,但是RichTextBox UI不会更改Font,甚至不会更改SelectionFont
并且Clipboard.SetText()Clipboard.GetText()将照常工作。

答案 1 :(得分:0)

您可以使用KeyDown事件来阻止/阻止Alt键正常工作...

    private void txt_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Alt)
        {
            e.SuppressKeyPress = true;
        }
    }