我正在Windows窗体中创建一些印地语键入应用程序。
我使用过Text
字体,有些字符有一些alt键控制代码,但是如果我输入其他KrutiDev010
,Alt+0261
等其他alt键控制代码,则会显示分别章程Alt+025896
和ą
,并将我的文本框字体更改为“ Arial”。
如何仅阻止那些更改RichTextBox字体的替代键控制代码?
答案 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.LanguageOption和RichTextBoxLanguageOptions标志。
您可以在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;
}
}