2012-03-04 53 views
0

我具有其中用户输入信息到两个单独的文本框,然后程序点击一个按钮,此时程序做了一些工作,并返回数据传输到第三个文本框。如何从一个方法传递对象数据到另一个

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

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

我敢肯定它这样做,因为该对象的第一个按钮点击方法的实例里面,而不是在类级别被实例化,因此一旦程序离开对象消失的方法。我试图在类级别实例化对象,但我不能,因为我收到“字段初始值设定程序无法引用非静态字段,方法或属性”错误。

我已经查看了此问题的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); 
    } 

回答

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); 
} 

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

+0

啊,我明白了。我知道你可以用变量做到这一点,但不知道你可以用对象来做到这一点。凉!非常感谢你! – 2012-03-04 22:42:44

+0

当然,没问题。一步一步来.. :) – AVIDeveloper 2012-03-04 22:44:49

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); 
    } 
} 
相关问题