我今天遇到了一件奇怪的事情,与winforms合作。
我创建的RichTextBox
默认FontSize
为14.25磅。
我正在执行某些操作,我需要创建临时RichTextBox
,我已从原始RichtextBox
复制了所选文本。之后,在没有我做出任何改变的情况下,整个tempRichTextBox文本的字体大小正好增加了 0.25 pt 。每一封信。那是一些错误还是什么?
using (RichTextBox tempRichTextBox = new RichTextBox())
{
tempRichTextBox.Rtf = this.richTextBox.SelectedRtf;
int tempStart = this.richTextBox.SelectionStart;
int tempLength = this.richTextBox.SelectionLength;
for (int i = 0; i < tempLength; i++)
{
tempRichTextBox.Select(i, 1);
this.baseSize = tempRichTextBox.SelectionFont.Size;
}
tempRichTextBox.Select(0, tempLength);
this.richTextBox.SelectedRtf = tempRichTextBox.SelectedRtf;
this.richTextBox.Select(tempStart, tempLength);
}
有人知道为什么会这样吗?
答案 0 :(得分:2)
我发现WinForms会增加字体大小(或者有时会从中减去)0.25
。您在设计器中看到了14.25
,但这是因为值14
最初存储在那里而实现的。当我单独使用 FontDialog 系统对话框时,我也看到了这种情况。您选择字体大小8,在返回的Font对象中找到8.25。在某些尺寸上,我发现了类似14.75而不是15的东西。但它没有随着字体大小增长,即你会发现字体大小= 5000的相同小差异。
原因:字体大小以0.75为单位变化。 It is related to DPI and font size units.
因此,实施公式考虑到这一点,你应该开始获得更可取的结果。请注意,在FontDialog和RTB的上下文中,DPI或字体大小单位可能不同。
答案 1 :(得分:1)
这很有趣。我没有答案为什么,但差异重复每3磅字体大小。
void btn_Click(object sender, EventArgs e) {
StringBuilder sb = new StringBuilder();
richTextBox.Text = "asdf";
for (int i = 24; i <= 100; i++) {
using (Font f = new Font(SystemFonts.DefaultFont.FontFamily, 1f * i / 4)) {
richTextBox.SelectAll();
richTextBox.SelectionFont = f;
richTextBox.Font = f;
sb.AppendLine(f.Size + "\t" + richTextBox.SelectionFont.Size + "\t" + Math.Round(f.Size - richTextBox.SelectionFont.Size, 3));
}
}
}