以其他形式调用方法C#Winforms

时间:2017-06-01 19:28:49

标签: c# database winforms linq methods

我正在制作一个带有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中调用时(就像我想要的那样)我的主要内容没有任何变化页。像这个方法几乎没有被调用。一切都保持不变,不会被清除。有什么帮助吗?

1 个答案:

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