0

专门查看 Customer 类中的到达方法。我正在使用 for 循环来创建客户类的实例,当我尝试将他们的到达时间写出到文本框(仅用于测试目的)时,文本框不会更新。为什么是这样?

这只是我的计算机课的一个小型模拟项目。它处于早期阶段,并且在很多地方可能是错误的!

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.Threading;

namespace QueueSimulation
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        public void Form1_Load(object sender, EventArgs e)
        {
            MessageBox.Show("The form has loaded");
        }

        public void goButton_Click(object sender, EventArgs e)
        {
            Initialisers init = new Initialisers();

            Customer customer = new Customer();

            customer.Arrive();
        }

        private void stopButton_Click(object sender, EventArgs e)
        {
            // put code here to break out of the program
        }
    }

    public class Customer : Initialisers
    {
        int waitingTime;
        int arrivalTime;
        int arrivalInterval;

        Initialisers init = new Initialisers();


        public void Arrive()
        {
            Customer[] customer = new Customer[1000];
            int counter = 0;
            for (int i = 1; i <= 10; i++)
            {
                customer[i] = new Customer();
                customer[i].TimeArrived();
                displayArrival.Text = displayArrival.Text + customer[i].TimeArrived().ToString();
                // Implement something to either show the time in the queue if needed
                Thread.Sleep(init.CustomerArriveTime*100);
            }
            MessageBox.Show("All of the customers have arrived");
        }

        public string TimeArrived()
        {
            return Convert.ToString(DateTime.Now);
        }

        public void Leave()
        {

        }

        public void GetServed()
        {

        }
    }

    public class Server
    {
        bool servingStatus;
        int servingTime;

        public void Serve()
        {

        }
    }

    public class Initialisers : Form1
    {
        private int cust_no = 3;

        public int CustomerArriveTime
        {
            get
            {
                return cust_no;
            }
            set
            {
                cust_no = value;
            }
        }

        private int s_time = 4;

        public int serveTime
        {
            get
            {
                return s_time;
            }
            set
            {
                s_time = value;
            }
        }
    }
}
4

3 回答 3

0

将在 Form1 上创建的文本框对象的实例传递给 Arrive。

public void Arrive(TextBox displayArrival)

为什么要在 Initialiserz 中继承 Form1?在这种情况下,最好传递对 Form1 的引用而不是继承。

于 2010-12-07T10:36:56.883 回答
0

这似乎过于复杂。尝试模拟现实世界。什么是 Initialisers,为什么会有继承树:Customer > Initialisers > Form1?

您的客户正在写入自己的文本框,而不是您正在查看的文本框(来自表单的可见文本框)。

为什么不使用 Arrive 方法将私有字段设置为 DateTime.Now。然后,向客户询问其 TimeArrived,它会返回此字段。在您的表单中,在循环中尽可能多地调用这些方法。

这也将命令 (Arrive) 从查询 (TimeArrived) + 中分离出来,使您的继承更加合乎逻辑。

您甚至可能不再需要 Initialisers。并且不要让 Customer 继承自 Form,因为 Customer 不是 Form。

于 2010-12-07T10:39:52.147 回答
0

我认为这里有更多的设计问题,您正在创建客户内部客户的实例。

您的客户到达方法可能应该是另一个类中的函数,如下所示,客户应该只定义客户是什么。处理它们应该由不同的类来处理。

class Customer
{
    int waitingTime;         
    int arrivalTime;         
    int arrivalInterval; 

    // etc...
}

class ProcessCustomers
{
    pubic void Arrive()
    {
        // etc...
    }
}

public void goButton_Click(object sender, EventArgs e)            
{                
     Initialisers init = new Initialisers();                    
     ProcessCustomers CustomerQueue = new ProcessCustomers();                    
     CustomerQueue .Arrive();            
}  

但是对于文本框问题,您必须在表单类中公开一个属性并像这样设置它,

string ArrivalTime
{    
    get     
    {       
       return textBox1.Text;    
    }    
    set    
    {       
       textBox1.Text = value;    
    } 
} 
于 2010-12-07T10:48:48.997 回答