我建立一个应用程序,我应该抓住几个值,并与他们建立良好的文字:Name,Age等等。
输出将是纯文本格式TextBox。
我试图使这些信息以某种形式出现columns,因此我试图将它们分开tab以使其更加清晰。
例如,与其具有:
Ann 26
Sarah 29
Paul 45
我希望显示为:
Ann 标签页 26 Sarah 标签页 29 Paul 标签页 45
关于如何insert将选项卡插入文本的任何提示?
我建立一个应用程序,我应该抓住几个值,并与他们建立良好的文字:Name,Age等等。
输出将是纯文本格式TextBox。
我试图使这些信息以某种形式出现columns,因此我试图将它们分开tab以使其更加清晰。
例如,与其具有:
Ann 26
Sarah 29
Paul 45
我希望显示为:
Ann 标签页 26 Sarah 标签页 29 Paul 标签页 45
关于如何insert将选项卡插入文本的任何提示?
Answers:
哈扎尔是对的\t。这是C#的转义字符的完整列表:
\' 单引号。
\" 双引号。
\\ 反斜杠。
\0 为空字符。
\a 警报字符。
\b 退格。
\f 用于换页。
\n 换一行。
\r 回车。
\t 用于水平制表符。
\v 用于垂直标签。
\uxxxx用于unicode字符的十六进制值(例如\u0020)。
\x与相同\u,但是您不需要前导零(例如\x20)。
\Uxxxxxxxx 对于unicode字符的十六进制值(生成替代项需要更长的形式)。
有几种方法可以做到这一点。最简单的是\t在您的文本中使用。但是,\t在某些情况下(如PdfReportnuget包)可能无法正常工作。
\t不起作用的情况下添加有关如何添加选项卡的信息将很有用。;)
使用Microsoft Winform controls,如果没有一些我将在下面解释的变通办法,就不可能正确解决您的问题。
问题
简单使用"\t"或vbTab存在的问题是,当显示多个文本框并且必须对所有文本框遵守对齐方式时,“唯一” "\t"或“ vbTab解决方案”将显示并非始终正确对齐的内容。
VB.Net中的示例:
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
TextBox1.Text = "Bernard" + vbTab + "32"
TextBox2.Text = "Luc" + vbTab + "47"
TextBox3.Text = "François-Victor" + vbTab + "12"
End Sub
将显示
如您所见,agefor的值François-Victor向右移动,并且与age其他两个TextBox的值不对齐。
解
要解决此问题,您必须使用特定的SendMessage()user32.dll API函数设置Tabs位置,如下所示。
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
并显示以下表格
您现在可以看到,所有值都已正确对齐:-)
备考
MultilineTextBox的属性必须设置为True。如果将此属性设置为False,则选项卡的位置将与以前一样。
怎么样 AcceptsTab属性分配并不重要(我已经测试)。
这个问题已经在StackOverflow上得到了解决
注意:制表符位置的度量单位不是字符,而是看起来是字符的1/4。这就是为什么我将长度乘以4。
C#解决方案
using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
[DllImport("User32.dll", CharSet = CharSet.Auto)]
private static extern IntPtr SendMessage(IntPtr h, int msg, int wParam, uint[] lParam);
private const int EM_SETTABSTOPS = 0x00CB;
private const char vbTab = '\t';
public Form1()
{
InitializeComponent();
var tabs = new uint[] { 25 * 4 };
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);
}
}
}