.net 带有Segoe UI字体的多行文本框缩进文本
我已经将我的Windows Forms.Net应用程序从默认的MS Sans Serif 8.25字体升级为使用Segoe UI 8.25字体,因为这看起来更容易看,而且似乎是MS自己使用的 但是,如果我使文本框多行,那么它会将文本缩进几个像素。并使其与其他单行文本框不对齐,以至于看起来文本开头有一个空格 我猜这是MS控件/字体的错误.net 带有Segoe UI字体的多行文本框缩进文本,.net,winforms,.net,Winforms,我已经将我的Windows Forms.Net应用程序从默认的MS Sans Serif 8.25字体升级为使用Segoe UI 8.25字体,因为这看起来更容易看,而且似乎是MS自己使用的 但是,如果我使文本框多行,那么它会将文本缩进几个像素。并使其与其他单行文本框不对齐,以至于看起来文本开头有一个空格 我猜这是MS控件/字体的错误 有解决办法吗?这是.Net 4.5.2(及更高版本)这是我以前从未注意到的,而且似乎是特定于字体的。如前所述,在使用Sergio UI字体时,多行文本框添加了一个
有解决办法吗?这是.Net 4.5.2(及更高版本)这是我以前从未注意到的,而且似乎是特定于字体的。如前所述,在使用Sergio UI字体时,多行文本框添加了一个左边距 基本WinForm文本框不公开在底层本机控件上设置边距的功能,但该功能存在 下面的代码演示了如何使用编辑控制消息和来检索和设置左边距 对于那些感兴趣的人来说,使用带有Sergio UI字体的多行文本框的默认左边距为5,而单行文本框的左边距为0
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Const EC_LEFTMARGIN As Int32 = 1
Const EM_SETMARGINS As Int32 = &HD3
Const EM_GETMARGINS As Int32 = &HD4
Dim res As Int32 = SendMessage(New HandleRef(Me, tbSingleLine.Handle), EM_GETMARGINS, 0, 0)
Dim leftMargin As Int32 = res And &HFFFF
SendMessage(New HandleRef(Me, tbMultiline.Handle), EM_SETMARGINS, EC_LEFTMARGIN, leftMargin)
End Sub
<DllImport("user32.dll", CharSet:=CharSet.Auto)> _
Public Shared Function SendMessage(ByVal hWnd As HandleRef, ByVal msg As Int32, ByVal wParam As Int32, ByVal lParam As Int32) As Int32
End Function
Private子按钮1\u单击(发送者作为对象,e作为事件参数)处理按钮1。单击
常量EC_左边距为Int32=1
常量EM_SETMARGINS为Int32=&HD3
常量EM_GETMARGINS为Int32=&HD4
Dim res As Int32=SendMessage(新HandleRef(Me,tbSingleLine.Handle),EM_GETMARGINS,0,0)
将左边距调整为Int32=res和&HFFFF
SendMessage(新HandleRef(Me,tbMultiline.Handle),EM_setmargin,EC_LEFTMARGIN,LEFTMARGIN)
端接头
_
公共共享函数SendMessage(ByVal hWnd作为HandleRef,ByVal msg作为Int32,ByVal wParam作为Int32,ByVal lParam作为Int32)作为Int32
端函数
编辑:根据EM_SetMargins的文档,如果使用了EC_USEFONTINFO参数,则边距可以基于字体度量。这可能是观察到的行为的原因。鉴于这是一个有故障的MS控件,是否有任何有效的报告方法来修复它?@Gwynge,你可以试试,但不要抱太大希望。最有可能的是,它会收到一个“这是设计的”响应,但你永远不知道。在查看上的文本框代码时,我注意到有关.NET4.6.1及更新版本的新功能的文档。在4.6中仍然是一个问题。使用Connect(312289)记录。我熟悉“这是一个特性,而不是一个bug”的回答,因为我在90年代初与IBM打过交道:o)@Gwynge,我在您的提交中添加了一条评论,向他们提供了我在回答这个问题时发现的详细信息。