我正在制作一个带有C#WinForms应用程序的POS系统,并且有一个Form1
(主屏幕)和一个Checkout
屏幕(可以被认为是Form2)。 Form1
中有一种名为clearSale()
的方法。我试图通过Form2
中的此按钮事件来调用它:
private void btnProccessComplete_Click(object sender, EventArgs e)
{
MessageBox.Show("Order Successfully Processed for: $" + checkoutTotal.ToString("F2"), "Successful Payment", MessageBoxButtons.OK, MessageBoxIcon.Information);
readyStock(checkoutItems);
isCheckoutComplete = true;
Form1 myObj = new Form1();
myObj.clearSale();
this.Close();
}
在此事件结束时,它会从clearSale()
调用Form1
方法:
public void clearSale()
{
itemList.Items.Clear();
txtUPCScan.Clear();
orderTotal = 0.00;
lblTotalPrice.Text = "$0.00";
picPay.Enabled = false;
myShoppingCartItems = null;
myShoppingCartItems = new string[250];
totalItems = 0;
}
clearSale()
方法几乎只是将所有txtbox设置回空状态,并使所有内容再次焕然一新。我的问题是,只要在clearSale()
中调用Form1
方法就可以了,但是当它在Form2
中调用时(就像我想要的那样)我的主要内容没有任何变化页。像这个方法几乎没有被调用。一切都保持不变,不会被清除。有什么帮助吗?
答案 0 :(得分:1)
如果您要创建新的Form1
对象,则不会引用之前创建的对象。
通过构造函数参数将Form1
传递给Form2
。
public class Form2: Form{
Form1 mainObj;
public Form2(Form1 _mainObj){
this.mainObj = _mainObj;
}
private void btnProccessComplete_Click(object sender, EventArgs e)
{
MessageBox.Show("Order Successfully Processed for: $" + checkoutTotal.ToString("F2"), "Successful Payment", MessageBoxButtons.OK, MessageBoxIcon.Information);
readyStock(checkoutItems);
isCheckoutComplete = true;
this.mainObj.clearSale();
this.Close();
}
}
从Form1
起,您现在必须使用以下内容创建Form2
Form2 checkout = new Form2(this);