具体查看Customer类中的arrival方法。我使用for循环来创建客户类的实例,当我尝试将它们的到达时间写到textBox(仅用于测试目的)时,文本框不会更新。这是为什么?
这只是我的Computing类的一个小型模拟项目。它还处于早期阶段,在很多地方可能都是错误的!
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;
}
}
}
}
答案 0 :(得分:0)
传递到Form1上创建的文本框对象的实例。
public void Arrive(TextBox displayArrival)
为什么要在Initialiserz中继承Form1?在这种情况下,最好将引用传递给Form1而不是继承。
答案 1 :(得分:0)
这似乎过于复杂。尝试模拟现实世界。什么是Initialisers,为什么有继承树:Customer&gt;初始化器&gt; Form1中?
您的客户正在写入自己的TextBox,而不是您正在查看的TextBox(可见的Form中的TextBox)。
为什么没有方法Arrive将私有字段设置为DateTime.Now。然后,向客户询问其TimeArrived,它返回此字段。在表单中,根据循环中的需要调用这些方法。
这也是来自查询(TimeArrived)的seperaties命令(Arrive)+使您的继承更加合理。
您甚至可能不再需要Initialisers。并且不要让客户从表继承,因为客户不是表格。
答案 2 :(得分:0)
我认为这里存在更多的设计问题,您正在创建客户内部的客户实例。
您的客户Arrive方法可能应该是另一个类中的函数,如下所示,客户应该只定义客户是什么。处理它们应该由不同的类处理。
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;
}
}