2012-03-06 2 views
0

ЭТО ГОМЕОРК: У меня есть программа, состоящая из двух winforms и трех классов. Программа выполняет работу, которую она должна выполнять для основной формы, и соответствующим образом отображает ее в текстовом поле основной формы. Помимо отображения информации, она также сохраняется в списке строк. Данные состоят из информации о заказе.Информация о списках исчезает

Строковый список передает эту информацию вместе с методом в другом классе и сохраняет ее в списке, который должен выполнять. После этого я нажимаю кнопку, которая открывает другую форму. В этой форме я вводим номер заказа. Предполагается, что метод сравнивает номер заказа, введенный с номером строки списка, и возвращает эту информацию, после чего он отображается в текстовом поле второй формы.

Это то, что должно произойти. Вместо этого, когда пришло время сравнить номер заказа с номером строки в списке, данные списка исчезли, и я не могу понять, почему. Вот мой код, который относится:

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

     this.txtNumberOfPizzaOrdered.Clear(); 
     this.txtNumberOfCokesOrdered.Clear(); 
     this.txtAmountDue.Clear(); 
     this.txtAmountPaid.Clear(); 
     this.lblYourOrder.Visible = true; 
     this.rtxtYourOrder.Visible = true; 
     this.rtxtYourOrder.Text = orderObject.OrderSummary(amountPaid); 

     //storeOrderObject = new DailySummary(orderObject.OrderSummary(amountPaid)); 

     storeOrderObject = new DailySummary(this.rtxtYourOrder.Text);   
    }  

private void btnDailySummary_Click(object sender, EventArgs e) 
    { 
     DailySummaryForm form = new DailySummaryForm(); 
     // this.Visible = false; 
     form.Show(); 
    } 

........ 

public class DailySummary 
{ 
    //declare variables 
    int numberOfCokes = 0, 
     numberOfPizzas = 0, 
     totalOfCokes = 0, 
     totalOfPizzas = 0,    
     orderNumberRequest = 0;   

    string orderFromForm1 = "", 
      getAllTheOrders = "", 
      getAnOrder = ""; 

    List<string> pizzaOrderList = new List<string>(); 

    public DailySummary(string orderForm) 
    { 
     orderFromForm1 = orderForm; 
     StoreOrder(orderFromForm1); 
    } 

    public DailySummary(int orderRequest) 
    { 
     orderNumberRequest = orderRequest; 
     GetOrder(OrderNumberRequest); 
    } 

public int OrderNumberRequest 
    { 
     get 
     { 
      return this.orderNumberRequest; 
     } 
    }   

//store order 
    public void StoreOrder(string orderFromForm1) 
    { 
     pizzaOrderList.Add(orderFromForm1); 
    } 

    //get the order 
    public string GetOrder(int OrderNumberRequest) 
    { 
     for (int row = 0; row < pizzaOrderList.Count; row++) 
     { 
      if (row == (OrderNumberRequest - 1)) 
      { 
       getAnOrder = pizzaOrderList[row]; 
      } 
     } 
     return getAnOrder; 
    } 

........ 

public partial class DailySummaryForm : Form 
{ 
    int orderNumberRequest = 0; 
    //instantiate a from object 
    OrderForm formObject; 
    DailySummary summaryObject; 

    public DailySummaryForm() 
    { 
     InitializeComponent(); 
    } 

    private void btnOrderNumberButton_Click(object sender, EventArgs e) 
    { 
     orderNumberRequest = int.Parse(this.txtOrderNumber.Text); 
     summaryObject = new DailySummary(orderNumberRequest); 

     this.rtxtDisplayOutput.Visible = true; 
     this.rtxtDisplayOutput.Text = summaryObject.GetAnOrder; 
    } 
+0

Оценивается, когда вы упоминаете, что это домашнее задание. –

+0

Я не знал об этом. Я сделал соответствующее редактирование –

+0

было бы легче помочь, если вы показали картинку. –

ответ

1

В вашем методе btnPaymentButton_Click вы создаете экземпляр класса DailySummary, то позже, когда ваш в DailySummaryForm создать новый экземпляр класса DailySummary.

Эти экземпляры являются отдельными и поэтому не имеют одинаковых значений.

По мере не сохраняющиеся значения к БДУ вы, вероятно, хотите:

  1. попытаться сделать ваш DailySummary Static (который будет делать это, доступным на протяжении всего Winform приложения ). (Обычно не рекомендуется иметь слишком много глобальных (статических) переменных, зависающих вокруг, но без механизма персистентности, где вы можете хранить свой ежедневный свод, вам нужно обычное место, чтобы его найти.
  2. Передайте инициализированный экземпляр DailySummary класс для вашего DailySummaryForm. (DailySummaryForm может выставлять публичное свойство. Недостатком этого метода является то, что если ваше переключение между обеими формами и каждой формой изменило ваш итоговый класс, вам постоянно нужно передавать его обратно и вперед между формами.
+0

В методе btnPaymentButton_Click мне пришлось создать экземпляр класса DailySummary, чтобы я мог использовать эту кнопку, чтобы вызвать форму DailySummary. В DailySummaryForm мне нужно было создать новый экземпляр, чтобы передать orderNumber классу DailySummary. Как мне это сделать, чтобы экземпляры были одинаковыми? –

+0

экземпляры могут передаваться как переменные и списки? –

+0

Если вы ставите свой класс DailySummary static (вам также нужно будет сделать свойства статичными), вам не нужно создавать экземпляр этого в любом из классов. вы просто сможете вызвать DailySummary.GetAnOrder. Пометив объект как статический, он инициализируется при запуске приложения. Если это общедоступный объект, то вы можете ссылаться на него из любой точки вашего приложения без необходимости его инициализации. – rie819

0

DailySummaryForm создает новый экземпляр

DailySummary.

и поэтому пуст.

+0

Благодарим за помощь –

Смежные вопросы