【问题标题】:Why do multiple font sizes display inside Plain TextBox?为什么在纯文本框中显示多种字体大小?
【发布时间】:2013-06-05 17:46:56
【问题描述】:

这不是关于如何更改字体大小的问题。相反,为什么我的字体大小在我键入(或粘贴)时会自行改变,当它位于一个普通的 TextBox 控件中时时间。

我的代码:

using(FontDialog d = new FontDialog())
{
   // The usual properties...
   if(d.ShowDialog() == DialogResult.OK)
   {
      textbox1.Font = d.Font;
   }
}

字体设置为 8pt。如果我将纯文本粘贴到其中,顶行将是 9 到 10pt,而底行明显更小(约 8 pt)。

我选择哪种字体、字体样式或字体大小都没有关系;这种情况一直在发生!

更新

感谢您迄今为止的所有帮助。在下面回答您最近的问题:

我的应用面向 .NET 4.5。

代码中没有混淆,因为我能够在一个新的 Windows 窗体项目中重现这个问题,除了一个表单、一个文本框和一个调用 FontDialog 的按钮。

为了回答有关我的视频驱动程序的问题,我确实需要支持我几周前购买的应用程序,他们告诉我运行 DXDiag,他们回复我说我的视频卡驱动程序已过期,但是我没想到是因为我总是每隔几个月检查一次。然后我去了制造商的网站,它说我已经为我的系统安装了最新的驱动程序。

Windows 更新还说没有新的可用更新。不过,我会再次检查新版本的驱动程序。


我还在一个新的空白项目中进行了测试,在该项目中显示 TextBox 在调用 FontDialog.ShowDialog() 之前 使用的字体,在它显示之后和新字体之后已设置并且一切都匹配 - 但是在更改文本框内的字体/字体大小后仍然存在问题。

【问题讨论】:

  • 我想知道它是否与处理 FontDialog 的 using 块有关。尽量不要丢弃,看看会发生什么。
  • Dispose 方法的最佳实践是所有基类/父类也都被处理...说实话对字体或 Windows 窗体应用程序不太熟悉,但您可以做的一件事是调试并查看在 using 块之前和之后的 Font 对象上,看看有什么变化,如果有的话。
  • 您可以将您的项目上传到 DropBox 或其他文件共享服务吗?我的猜测是您在代码中进行了混淆,或者您安装了一些 Windows 样式工具。
  • 开始从程序中剥离所有内容,直到您拥有仍然重复问题的最简单的程序。如果在执行此操作时问题消失了,那么您只是找到了问题的根源。如果没有,请在此处发布完整示例。
  • 请同时说明您的目标是哪个 .NET 框架版本。

标签: c# .net winforms .net-4.5


【解决方案1】:

我怀疑您使用的高 DPI 屏幕没有使用 96 DPI 的精确倍数。在这种情况下,Windows 会将您的应用程序呈现到 96 DPI 的虚拟屏幕,然后将结果重新缩放为新的 DPI。当应用程序的显示重新缩放时,如果 DPI 不是 96 的整数倍,可能会导致舍入错误,从而导致字体看起来不均匀。

尝试将您的 DPI 设置为 Microsoft 的 Writing High-DPI Win32 Applications 指南中的 Appendix C 中的尺寸之一。

【讨论】:

  • 我认为这实际上是问题所在。我刚把我朋友的显示器插在他留下的地方。当他的屏幕插入时,字体看起来很正常。谢谢:-)
  • 抱歉花了这么长时间才接受这个答案。我不知道我是怎么忘记的!再次感谢:)
猜你喜欢
  • 2021-11-23
  • 2010-10-07
  • 1970-01-01
  • 2019-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多