TextBox格式化麻烦

时间:2014-04-20 05:42:18

标签: c# .net textbox queue simulation

我仍然是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;
        }
    }

有人有什么建议吗?

3 个答案:

答案 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;
    }