C#的WinForm程序设置中法混合文字的字体时发生了奇怪的事情

哈利_蜘蛛侠 2016-09-18 10:49:27
现在在做一个法汉电子词典,然后就涉及到中法混合文本的字体设置了。当然由于要支持不同的字体显示,所以文字都放在了一个RichTextBox里了。然后发生了奇怪的事情:
看下图:
这里的两种字体是西方语言的字体,都可以比较好看地显示法语字符:


然后这里是三个效果图,第一行是Calibri字体的效果,第二行是Times New Roman字体的效果,而第三行是宋体字的效果:


这三行字的最后一个字符都是法语字符。前两行的效果都很令人满意。但是奇怪的事情发生了:第三行最后的那个法语字符没法改变字体了!设为Calibri和Times New Roman都没用。请问这是怎么回事呢?字体设置菜单项的消息响应函数都是类似这样的:

private void calibriToolStripMenuItem_Click(object sender, EventArgs e)
{
contentRichTextBox.SelectionFont = new Font("Calibri", defaultFontSize,
FontStyle.Regular);
}

...全文
372 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
那小小的微笑 2017-09-25
  • 打赏
  • 举报
回复
在你的主窗体代码中 private void ChatFormCol_Load(object sender, EventArgs e) { richtextbox1.LanguageOption = RichTextBoxLanguageOptions.UIFonts; //防止中英文字体不一致 } 就可以了
jmcooler 2016-09-22
  • 打赏
  • 举报
回复
那应该是看这个字体中,是不是有法语字符集。 譬如说,宋体里,肯定没有法语字符。 你去查一下,字体的原理,就弄清除了
哈利_蜘蛛侠 2016-09-22
  • 打赏
  • 举报
回复
所以到底应该怎么办呢?好纠结啊!感觉RichTextBox在我们输入文字的时候偷偷地做了许多事情,尤其是在切换中英文和切换字体的时候。
哈利_蜘蛛侠 2016-09-22
  • 打赏
  • 举报
回复
引用 5 楼 jmcooler 的回复:
那应该是看这个字体中,是不是有法语字符集。
譬如说,宋体里,肯定没有法语字符。
你去查一下,字体的原理,就弄清除了

上面的第二幅图搞错了,应该是这个:
哈利_蜘蛛侠 2016-09-22
  • 打赏
  • 举报
回复
引用 5 楼 jmcooler 的回复:
那应该是看这个字体中,是不是有法语字符集。
譬如说,宋体里,肯定没有法语字符。
你去查一下,字体的原理,就弄清除了


我觉得肯定是有的,否则就不会显示了。然后我又找到了这个现象的另一个重现方法。在我的程序里,法语字符是通过点击按钮的形式添加的RichTextBox控件中的,就是通过如下的方式:

private void letterButton_Click(object sender, EventArgs e)
{
var control = createNewFormBase.LastFocusedTextBox;
if (control is TextBox)
{
TextBox textBox = (TextBox)control;
if (textBox.ReadOnly == true)
return;

string s = textBox.Text;
var index = textBox.SelectionStart;
textBox.Text = s.Insert(index, ((Control)sender).Text);
textBox.SelectionStart = index + 1;
textBox.Focus();
}
else if (control is RichTextBox)
{
RichTextBox richTextBox = (RichTextBox)control;
if (richTextBox.ReadOnly == true)
return;

string s = richTextBox.Text;
var index = richTextBox.SelectionStart;
richTextBox.Text = s.Insert(index, ((Control)sender).Text);
richTextBox.SelectionStart = index + 1;
richTextBox.Focus();
}
else
{
// 提示错误信息
}
}


然后在当且字体为Calibri的时候,插入字符是没有问题的,如下面两幅图所示:




然而当这行文字前面出现中文字符的时候,就发生了一楼说的那种诡异的现象:




所以这到底是怎么回事呀?搞得我都想要放弃了。难道是我插入字符的方式不对?我刚才试了试,直接复制粘贴一个Calibri字体的法语字符的话,好像就可以了。所以是不是在插入字符的时候应该设置被插入字符的字体呢?如果是的话,那么应该怎么设置呢?
sqxinquan 2016-09-19
  • 打赏
  • 举报
回复
設置語文多看看
哈利_蜘蛛侠 2016-09-19
  • 打赏
  • 举报
回复
引用 1 楼 caozhy 的回复:
设置下系统的区域语言设置看看
设为其他语言的话还能够显示中文吗?
threenewbee 2016-09-18
  • 打赏
  • 举报
回复
设置下系统的区域语言设置看看

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧