我正在做一个创建POS系统的学校项目,我需要通过不同的表单传递相同的订单列表。问题是每次我返回主菜单,列表刷新虽然我仍然需要数据反正是为了防止这种情况发生?
public partial class Main : Form
{
List<string> order = new List<string>();
public Main()
{
InitializeComponent();
}
public Main(List<string> order)
{
InitializeComponent();
this.order = order;
}
这是主菜单的开始代码
这是将列表框中的项目添加到列表
的代码 private void confirmbtn_Click(object sender, EventArgs e)
{
order.AddRange(temp_order);
if (pendinglist.Items.Count != 0)
{
MessageBox.Show("Your Items have been added! yay!", "That Sushi", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
MessageBox.Show("No items was selected.", "That Sushi", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
pendinglist.Items.Clear();
}
提前感谢您的帮助。如果代码有任何其他问题,请告诉我。再次感谢你的帮助
答案 0 :(得分:0)
您可能正在关闭表单并在每次再次打开时重新创建表单,并且由于这些订单位于其中,显然以前的内容会丢失。
解决方案:订单列表应位于主窗体之外
这是一个非常简单的模式,它非常原始,但它的工作原理,应该足够/合理的功课:静态类
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void buttonNewOrder_Click(object sender, EventArgs e)
{
MyModel.NewOrder();
}
private void buttonAddProduct_Click(object sender, EventArgs e)
{
var product = new Product();
product.Name = "PS4";
product.Price = 1000000000.0m;
MyModel.Order.AddProduct(product);
}
private void buttonShowProductsInOrder_Click(object sender, EventArgs e)
{
var order = MyModel.Order;
var products = order.Products;
var builder = new StringBuilder();
foreach (var product in products)
{
var format = string.Format("Name: {0}, Price: {1}", product.Name, product.Price);
builder.AppendLine(format);
}
MessageBox.Show(builder.ToString());
}
}
以下是您从表单中使用它的方法:
$invoices_object = $this->user->invoices();
$invoices = [];
foreach($invoices_object as $invoice) {
array_push($invoices, $invoice->getStripeInvoice() );
}
return $invoices;
订单不会消失,并且可以通过多种形式访问。
显然这是一个非常糟糕的做法,大师将使用MVP(模型视图演示者),MVC(模型视图控制器)或后面的数据库中的任何模式,但没有必要为您的问题推出这样的设计。但是,您可以/应该看一下这些概念是什么。
祝你好运!