Windows Forms TextBox Bug?
本文关键字:Bug TextBox Forms Windows | 更新日期: 2023-09-27 18:32:30
我有Windows Forms项目。窗体上有一个文本框,称为 txt。任务是在文本框中写入用户的字符串,在两列中解析文本。每列必须左对齐。下面是示例:
--------------------------
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;
我有一张意想不到的图片:
文本框输出
之后,我尝试将测试字符串写入文件。结果如下:
文件输出
文件中的输出正确。文本框中的输出错误。文本框有问题。如何解决这个问题?这是我的测试项目的代码:
/*
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();
}
}
}
尝试将 TextBox 控件的字体更改为等宽字体,如 Courier New
。
看起来您的文本框仍在使用默认字体 Microsoft Sans Serif
,每个字母的宽度都不同。
由于您没有使用等宽字体,因此空格和字符具有不同的宽度。在比例字体中,空格通常非常窄,因此如果有更多的空格,则该行看起来会比具有较少空格的主线短。更改为等宽字体(例如Courier或Consolas),它会看起来更好。
您需要将
文本框的字体设置为等宽字体,它将看起来像您想要的那样。