Public Class Form1
Public Declare Function SendMessage _
Lib "user32" Alias "SendMessageA" _
( ByVal hWnd As IntPtr _
, ByVal wMsg As Integer _
, ByVal wParam As Integer _
, ByVal lParam() As Integer _
) As Integer
Private Const EM_SETTABSTOPS As Integer = &HCB
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim tabs() As Integer = {4 * 25}
TextBox1.Text = "Bernard" + vbTab + "32"
SendMessage(TextBox1.Handle, EM_SETTABSTOPS, 1, tabs)
TextBox2.Text = "Luc" + vbTab + "47"
SendMessage(TextBox2.Handle, EM_SETTABSTOPS, 1, tabs)
TextBox3.Text = "François-Victor" + vbTab + "12"
SendMessage(TextBox3.Handle, EM_SETTABSTOPS, 1, tabs)
End Sub
End Class
9条答案
按热度按时间yh2wf1be1#
尝试在字符串中使用
\t
字符gajydyqb2#
Hazar的
\t
是正确的,下面是C#转义字符的完整列表:\'
表示单引号。\"
表示双引号。\\
表示反斜杠。\0
表示空字符。\a
表示警报字符。\b
用于退格。\f
表示换页。\n
表示一个新行。\r
表示回车。\t
表示水平选项卡。\v
表示垂直选项卡。\uxxxx
表示Unicode字符十六进制值(例如\u0020
)。\x
与\u
相同,但不需要前导零(例如\x20
)。\Uxxxxxxxx
表示unicode字符十六进制值(生成代理项需要较长的格式)。f0ofjuux3#
使用
String.Format
也很有用,例如up9lanfz4#
使用
Microsoft Winform controls
,如果没有一点变通办法,就不可能正确地解决您的问题,我将在下面解释。简单使用
"\t"
或vbTab
的问题是,当显示多个TextBox时,必须考虑所有TextBox的对齐方式,只有"\t"
或vbTab
解决方案才会显示并非总是正确对齐的内容。VB. Net中的示例:
将显示
如您所见,
François-Victor
的age
值向右移动,并且未与其他两个TextBox的age
值对齐。要解决此问题,必须使用特定的
SendMessage()
user32.dll API函数设置制表符位置,如下所示。将显示以下表单
现在您可以看到,所有值都已正确对齐:-)
TextBox的
Multiline
属性必须设置为True。如果此属性设置为False,则Tab的位置与以前相同。AcceptsTab
属性如何赋值并不重要(我已经测试过了)。此问题已在StackOverflow上处理
注意:制表符位置的度量单位不是字符,而是字符的1/4,这就是为什么我将长度乘以4。
djp7away5#
rqmkfv5c6#
有几种方法可以做到这一点。最简单的是在文本中使用
\t
。然而,\t
可能在某些情况下不起作用,比如PdfReport
nuget package。lndjwyie7#
当使用文字字符串(以@”开头)时,这可能更容易
将导致
Apple:<tab>Bob
yhuiod9q8#
这很好用,但必须使用等宽字体。
7ajki6be9#
除了上面的答案外,您还可以使用PadLeft或PadRight:
这将在字符串的左侧或右侧填充空格。