如何将对象数据从一种方法传递到另一种方法

时间:2012-03-04 22:32:18

标签: c#

我有一个程序,用户将信息输入两个单独的文本框,然后单击一个按钮,此时程序会执行一些操作并将数据返回到第三个文本框。

然后,用户将数据输入另一个文本框并单击第二个按钮。该程序从第一个按钮单击方法返回文本框返回数据以及新的输入数据,做一些工作并将数据返回到多行文本框。

我遇到的问题是,一旦程序离开第一个按钮单击方法,返回数据就会消失,因此第一个按钮单击方法中没有数据传递给第二个按钮单击方法。

我很确定它会这样做,因为对象是在第一个按钮单击方法中实例化的,而不是在类级别实例化,因此一旦程序离开方法,对象就会消失。我尝试在类级别实例化对象,但我不能,因为我收到“字段初始化程序无法引用非静态字段,方法或属性”错误。

我已经查看了这个问题的MSDN规范,并了解导致它的原因,但他们给出的解决方法是在方法中实例化对象。所以我回到了我开始的地方。

我不知道该怎么做。这是我的代码,其中对象在按钮单击方法中实例化:

private void btnOrderButton_Click(object sender, EventArgs e)
    {              
        numberOfPizzas = int.Parse(this.txtNumberOfPizzaOrdered.Text);
        numberOfCokes = int.Parse(this.txtNumberOfCokesOrdered.Text);
        PizzaOrder orderObject = new PizzaOrder(numberOfPizzas, numberOfCokes);

        this.txtAmountDue.Text = orderObject.TotalAmountDue.ToString("C");                                  
    }

    private void btnPaymentButton_Click(object sender, EventArgs e)
    {
        amountDue = double.Parse(this.txtAmountDue.Text);
        amountPaid = double.Parse(this.txtAmountPaid.Text);

        Payment orderPaymentObject = new Payment(amountDue, amountPaid);
    }

2 个答案:

答案 0 :(得分:1)

数据消失是因为您在方法的范围内创建临时对象,这意味着它不在方法之外。

要修复它在类级别声明数据成员并使用它,如下所示:

Payment m_orderPaymentObject = null;
private void btnPaymentButton_Click(object sender, EventArgs e)
{
    amountDue = double.Parse(this.txtAmountDue.Text);
    amountPaid = double.Parse(this.txtAmountPaid.Text);

    m_orderPaymentObject = new Payment(amountDue, amountPaid);
}

对您需要的任何其他数据对象重复此过程。

答案 1 :(得分:0)

这是一种方法。

class ClassName
{
    // available anywhere within the class; remember to instantiate before referencing
    private PizzaOrder _order;
    private Payment _payment;

    private void btnOrderButton_Click(object sender, EventArgs e)
    {              
        numberOfPizzas = int.Parse(this.txtNumberOfPizzaOrdered.Text);
        numberOfCokes = int.Parse(this.txtNumberOfCokesOrdered.Text);
        _order = new PizzaOrder(numberOfPizzas, numberOfCokes);

        this.txtAmountDue.Text = _order.TotalAmountDue.ToString("C");                                  
    }

    private void btnPaymentButton_Click(object sender, EventArgs e)
    {
        amountDue = double.Parse(this.txtAmountDue.Text);
        amountPaid = double.Parse(this.txtAmountPaid.Text);

        _payment = new Payment(amountDue, amountPaid);
    }
}