我建立一个应用程序,我应该抓住几个值,并建立一个文本与他们同在Name
,Age
等等.
输出将是一个纯文本TextBox
.
我试图让这些信息显示出来columns
,因此我试图将它们分开tab
以使其更清晰.
例如,而不是:
Ann 26
Sarah 29
Paul 45
Run Code Online (Sandbox Code Playgroud)
我希望它显示为:
Ann tab 26 Sarah tab 29 Paul tab 45
关于如何insert
将标签放入我的文字的任何提示?
Dan*_*n R 427
哈扎尔是对的\t
.这是C#的转义字符的完整列表:
\'
单引号.
\"
双引号.
\\
反斜杠.
\0
对于空字符.
\a
对于警报角色.
\b
对于退格.
\f
用于换页.
\n
换一条新线.
\r
回程.
\t
对于水平标签.
\v
对于垂直选项卡.
\uxxxx
对于unicode字符十六进制值(例如\u0020
).
\x
是相同的\u
,但你不需要前导零(例如\x20
).
\Uxxxxxxxx
对于unicode字符十六进制值(生成代理所需的更长形式).
dav*_*ine 72
它也可以是有用的String.Format
,例如
String.Format("{0}\t{1}", FirstName,Count);
Run Code Online (Sandbox Code Playgroud)
使用Microsoft Winform controls
,如果没有我将在下面解释的一些解决方法,就不可能正确解决您的问题。
问题
\n\n"\\t"
简单使用or的问题vbTab
是,当显示多个 TextBox 且所有 TextBox 必须遵守对齐方式时,唯一的"\\t"
或vbTab
解决方案将显示并不总是正确对齐的内容。
VB.Net 中的示例:
\n\nPrivate Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load\n TextBox1.Text = "Bernard" + vbTab + "32"\n TextBox2.Text = "Luc" + vbTab + "47"\n TextBox3.Text = "Fran\xc3\xa7ois-Victor" + vbTab + "12"\nEnd Sub\n
Run Code Online (Sandbox Code Playgroud)\n\n将显示
\n\n\n\n如您所见,age
的值Fran\xc3\xa7ois-Victor
向右移动并且与age
其他两个 TextBox 的值不对齐。
解决方案
\n\n要解决此问题,您必须使用特定的SendMessage()
user32.dll API 函数设置制表符位置,如下所示。
Public Class Form1\n\n Public Declare Function SendMessage _\n Lib "user32" Alias "SendMessageA" _\n ( ByVal hWnd As IntPtr _\n , ByVal wMsg As Integer _\n , ByVal wParam As Integer _\n , ByVal lParam() As Integer _\n ) As Integer\n\n Private Const EM_SETTABSTOPS As Integer = &HCB\n\n Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load\n Dim tabs() As Integer = {4 * 25}\n\n TextBox1.Text = "Bernard" + vbTab + "32"\n SendMessage(TextBox1.Handle, EM_SETTABSTOPS, 1, tabs)\n TextBox2.Text = "Luc" + vbTab + "47"\n SendMessage(TextBox2.Handle, EM_SETTABSTOPS, 1, tabs)\n TextBox3.Text = "Fran\xc3\xa7ois-Victor" + vbTab + "12"\n SendMessage(TextBox3.Handle, EM_SETTABSTOPS, 1, tabs)\n End Sub\n\nEnd Class\n
Run Code Online (Sandbox Code Playgroud)\n\n将显示以下表格
\n\n\n\n您现在可以看到,所有值都已正确对齐:-)
\n\n评论
\n\nMultiline
TextBox 的属性必须设置为 True。如果此属性设置为 False,则选项卡的位置与以前一样。
属性如何AcceptsTab
分配并不重要(我已经测试过)。
这个问题已经在StackOverflow上得到处理
\n\n注意:Tab 位置的测量单位不是字符,而是似乎是字符的 1/4。这就是为什么我将长度乘以 4。
\n\nC# 解决方案
\n\nusing System;\nusing System.Windows.Forms;\nusing System.Runtime.InteropServices;\n\nnamespace WindowsFormsApp1\n{\n public partial class Form1 : Form\n {\n [DllImport("User32.dll", CharSet = CharSet.Auto)]\n private static extern IntPtr SendMessage(IntPtr h, int msg, int wParam, uint[] lParam);\n private const int EM_SETTABSTOPS = 0x00CB;\n private const char vbTab = \'\\t\';\n\n public Form1()\n {\n InitializeComponent();\n\n var tabs = new uint[] { 25 * 4 };\n\n textBox1.Text = "Bernard" + vbTab + "32";\n SendMessage(textBox1.Handle, EM_SETTABSTOPS, 1, tabs);\n textBox2.Text = "Luc" + vbTab + "47";\n SendMessage(textBox2.Handle, EM_SETTABSTOPS, 1, tabs);\n textBox3.Text = "Fran\xc3\xa7ois-Victor" + vbTab + "12";\n SendMessage(textBox3.Handle, EM_SETTABSTOPS, 1, tabs);\n }\n }\n}\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
539733 次 |
最近记录: |