2

これを使用して:

richTextBox1.AppendText("EMPID: " + "\t\t" + "4001");
richTextBox1.AppendText(System.Environment.NewLine);
richTextBox1.AppendText(System.Environment.NewLine);
richTextBox1.AppendText("EmployeeName: " + "\t\t" + "Taborjakol");

私はこれを得た:

ここに画像の説明を入力

これに完全に合わせる方法:

ここに画像の説明を入力

4

4 に答える 4

5

できることは、RichTextBoxControl のタブ位置を変更することです。

richTextBox1.SelectionTabs = new int[] { 90, 180, 270, 360 };

richTextBox1.AppendText("EMPID: " + "\t\t" + "4001");
richTextBox1.AppendText(System.Environment.NewLine);
richTextBox1.AppendText(System.Environment.NewLine);
richTextBox1.AppendText("EmployeeName: " + "\t\t" + "Taborjakol");

SelectionsTab プロパティは、RichTextBox コントロールの各タブに使用されるスペースを再定義します。テキストに最適な結果を得るには、タブの設定を試す必要があります。

于 2013-07-25T07:55:30.630 に答える
1

リッチテキストボックスを使用する必要がない場合は、間違いなくグリッドビューを確認する必要があります。または、Telerik、DevCraft、ComponentOne などのサードパーティ ツールを使用する場合、ほとんどの場合、プロパティ グリッドと呼ばれるレイアウトを持つコントロールがあります。に興味がある。

リッチテキスト ボックスを使用する方法が他にない場合は、次の手順を実行する必要があります。

  1. 固定幅フォントまたはモノスペース フォントと呼ばれるhttp://en.wikipedia.org/wiki/Monospaced_fontを取得します。

  2. タブと同じ幅を共有する文字の量を評価します(文字数はテストで自分で把握する必要があるかわかりません)

  3. 左側のテキストの最大長を取得します (「従業員名」のような「列名」だと思います)

  4. いくつかの計算を行います - 最大長 + 1 つのタブ = x 文字

  5. 左側の残りのテキストに必要なタブ (1 から x のいずれか) を入力して、4 で計算したのと同じ量の文字を取得します。

ただし、リッチテキスト ボックスは、この種のシナリオでは理想的なコントロールではありません。

編集:

ここにいくつかのコード:

public partial class Form1 : Form
{
    private const int FetchTestData = 50;
    private const int TabCharLength = 5;

    public Form1()
    {
        InitializeComponent();

        //With this Fontsettings - 5 chars = 1 Tab - this changes with different fonts
        this.richTextBox1.Font = new System.Drawing.Font("Courier New", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));

        var type = typeof(TestData);
        var list = GetTestData();
        var maxProperty = GetMaxProperty(type);
        maxProperty = FillToNext(maxProperty);
        var properties = GetProperties(type);

        for (var i = 0; i < FetchTestData; i++)
        {
            var data = list[i];

            foreach (var propertyInfo in properties)
            {
                richTextBox1.AppendText(propertyInfo.Name);

                var tabs = GetNumberOfTabs(maxProperty, propertyInfo.Name.Length);
                for (var j = 0; j < tabs; j++)
                    richTextBox1.AppendText("\t");

                richTextBox1.AppendText(Convert.ToString(propertyInfo.GetValue(data)));

                richTextBox1.AppendText(Environment.NewLine);
            }

            if (i >= FetchTestData - 1) 
                continue;

            richTextBox1.AppendText(Environment.NewLine);
            richTextBox1.AppendText("---------- NEXT DATA ----------");
            richTextBox1.AppendText(Environment.NewLine);
        }
    }

    private int GetNumberOfTabs(int maxLength, int textLength)
    {
        if ((maxLength % TabCharLength) != 0)
            maxLength = FillToNext(maxLength);

        var difLength = maxLength - textLength;

        return (int)(Math.Floor(Convert.ToDouble(difLength / TabCharLength)) + 1);
    }

    private int FillToNext(int maxLength)
    {
        return maxLength + (5 - (maxLength % TabCharLength));
    }

    private PropertyInfo[] GetProperties(Type type)
    {
        if (type == null)
            throw new ArgumentNullException("type");

        return type.GetProperties(BindingFlags.Public | BindingFlags.Instance);
    }

    private int GetMaxProperty(Type type)
    {
        if (type == null)
            throw new ArgumentNullException("type");

        return (from x in GetProperties(type)
                select x.Name.Length).Max();
    }

    private List<TestData> GetTestData()
    {
        var returnValue = new List<TestData>();

        for (int i = 0; i < FetchTestData; i++)
        {
            returnValue.Add(new TestData()
            {
                ID = i,
                Name = "NameValue " + i,
                Description = "DescriptionValue " + i,
                PropertyA = "PropertyAValue " + i,
                PropertyB = "PropertyBValue " + i,
                SomeReallyLongPropertyName = "RandomStuff... " + i
            });
        }

        return returnValue;
    }
}

public class TestData
{
    public int ID { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public string PropertyA { get; set; }
    public string PropertyB { get; set; }
    public string SomeReallyLongPropertyName { get; set; }
}
于 2013-07-25T07:45:14.593 に答える
0

最初にフォントを等幅フォントに設定したいと述べたように、これは各文字が同じサイズになることを意味します。

したがって、次のようなものが表示されます。

ええええええええ

それよりも

えええええええええええええ

第二に、テキストを揃えることで、わずかに改善される可能性があります。

richTextBox1.SelectAll();
richTextBox1.SelectionAlignment = HorizontalAlignment.Center;

ただし、必要がない限り、別のコントロールを使用することをお勧めします。

  • グリッドビュー

  • リストボックス

これらはどちらもフォーマットが簡単で、gridview にはタブがあり、値を入力するときに string.Format を使用できるリストボックスです。

于 2013-07-25T07:49:29.033 に答える