4

Windowsフォームプロジェクトがあります。フォームにはtxtと呼ばれるtextBoxがあります。タスクは、2列のテキストを解析するtextBoxにユーザーの文字列を書き込むことです。各列は左側に配置する必要があります。次に例を示します。

--------------------------
Parameters          Values

height              36
width               72
length of trousers  32
--------------------------

それぞれの値は互いに重なり合う必要があります。明らかに、各パラメーターの後に必要な数のスペースを入力するメソッドが必要です。私はこの方法を開発しました:

private string AddSpaces(string str)
{
    const int MAX_WIDTH = 50;
    // We've got a 50 symbols field to fill it with current parameter
    // name and add necessary number of spaces.

    StringBuilder strWithSpaces = new StringBuilder();
    int numOfSpaces = MAX_WIDTH - str.Length;
        for (int i = 0; i < numOfSpaces; i++)
        {
            strWithSpaces.Append(" ");
        }
        return strWithSpaces.ToString();
}

次の文字列を使用してこのメ​​ソッドをテストしました。

string report = Environment.NewLine + "-------------" + DateTime.Now +
                "-------------" + Environment.NewLine +
                "Вихідні дані:" + Environment.NewLine +
                "a:" + 
                    AddSpaces("a:") +
                    "1" +
                    Environment.NewLine +
                "ab:" +
                    AddSpaces("ab:") +
                    "1" +
                    Environment.NewLine +
                "abcdefg:"+
                    AddSpaces("abcdefg:") +
                    "1" +
                    Environment.NewLine;

そして作った後

txt.Text += report;

私は予想外の写真を持っています:

TextBox出力

その後、テスト文字列をファイルに書き込もうとしました。結果は次のとおりです。

ファイル出力

ファイルの出力は正しいです。テキストボックスの出力が間違っています。textBoxに問題があります。この問題を解決するにはどうすればよいですか?これが私のテストプロジェクトのコードです:

/*
 Correct output looks like this:

a:          1
ab:         1
abcdefg:    1 
 */

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace spaces
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            string report = Environment.NewLine + "-------------" + DateTime.Now +
                "-------------" + Environment.NewLine +
                "Вихідні дані:" + Environment.NewLine +
                "a:" +
                    AddSpaces("a:") +
                    "1" +
                    Environment.NewLine +
                "ab:" +
                    AddSpaces("ab:") +
                    "1" +
                    Environment.NewLine +
                "abcdefg:" +
                    AddSpaces("abcdefg:") +
                    "1" +
                    Environment.NewLine;

            txt.Text += report;
            using (StreamWriter outfile =
                new StreamWriter(@"D:\test.txt"))
            {
                outfile.Write(report);
            }
        }
        private string AddSpaces(string str)
        {
            const int MAX_WIDTH = 50;

            StringBuilder strWithSpaces = new StringBuilder();
            int numOfSpaces = MAX_WIDTH - str.Length;
            for (int i = 0; i < numOfSpaces; i++)
            {
                strWithSpaces.Append(" ");
            }
            return strWithSpaces.ToString();
        }
    }
}
4

3 に答える 3

9

TextBox コントロールの Font を のようなモノスペース フォントに変更してみてくださいCourier New

TextBox はまだデフォルトの font を使用しているようMicrosoft Sans Serifで、文字ごとに幅が異なります。

于 2012-04-27T13:35:37.647 に答える
4

等幅フォントを使用していないため、スペースと文字の幅が異なります。通常、プロポーショナル フォントではスペースが非常に狭いため、スペースが多いと、スペースが少ないメインよりも線が短く見えます。モノスペース フォント (Courier や Consolas など) に変更すると、見栄えが良くなります。

于 2012-04-27T13:36:10.580 に答える
3

TextBox のフォントをMonospaced fontに設定する必要があります。そうすれば、希望どおりに表示されます。

于 2012-04-27T13:37:17.373 に答える