我仍然是c#和.NET的新手,我遇到了一些麻烦。我的数据结构老师分配了一个模拟项目,处理超级市场及其寄存器。它应该使用Queue<Customer>
列表来表示寄存器,它应该显示“客户”在模拟进行时实时进入和离开结账“线”。虽然他在控制台中完成了他的操作,但我试图使用一个Form并使用文本框进行显示,但是,我似乎无法将结帐“线”排成一行。它应该是这样的:
R 0 R 1 R 2
102 56 167
234 500
231
其中“R i”是寄存器编号,其下面的数字是客户编号,并且不断自我更新。
但是我的混乱人物很多。以下是应该显示正确结果的方法:
private void DisplayQueues ( )
{
int start = 4;
for (int i = 0; i < NumRegisters; i++)
{
Customer[] temp = RegLines[i].ToArray();
String line = ("R " + i.ToString ( )).PadRight(10);
foreach (Customer c in temp)
line += ("\r\n" + c.CustomerNum.ToString()).PadRight(10);
textBox_Registers.AppendText (line);
start += 4;
textBox_Registers.SelectionStart = start;
}
}
有人有什么建议吗?
答案 0 :(得分:0)
您需要的第一件事是为文本框提供固定大小的字体。没有它,它将(并且应该)总是包含混乱的混乱。我推荐Consolas
。从那以后,您可能希望编写一个帮助函数,将一段代码格式化为固定长度。但首先要做的是第一件事!
辅助函数可以像
一样简单 public string padded(string input, int length)
{ return input.PadLeft(length); }
或者您的输入始终是int:
public string padded(int input, int length)
{ return input.toString().PadLeft(length); }
或者如果您想完全抑制零,正如您的示例所示:
public string padded(int input, int length)
{ return input.toString("#").PadLeft(length); }
答案 1 :(得分:0)
private void formatString(string str1, string str2, string str3)
{
txtDisp.Text += String.Format("{0,-10} {1,-10} {2,10}", str1, str2, str3) + "\n";
}
答案 2 :(得分:0)
感谢你们的帮助,我终于能够得到它。因此,对于任何对我最终如何使用它感兴趣的人来说,DisplayQueues()方法看起来像这样:
private void DisplayQueues ( )
{
//Redraw textbox
textBox_Registers.Refresh ( );
//New string that holds register lines
String registers = "";
//Add register headings to string
registers += FormatHeading ( );
//First loop goes through customers in line, seconds loop goes through lines
for (int i = 0; i < RegLines[GetLongest ( )].Count; i++)
{
for (int n = 0; n < NumRegisters; n++)
{
//If more customers in line, add to string
if (i < RegLines[n].Count)
registers += String.Format ("{0, -10}", RegLines[n].ToArray()[i].CustomerNum.ToString());
}
registers += "\r\n";
}
textBox_Registers.Text = registers;
}