2010-12-07 2 views
0

В частности, поиск метода прибытия в классе Customer. Я использую цикл for для создания экземпляров класса клиента, и когда я пытаюсь записать их время поступления в текстовое поле (только для целей тестирования), текстовое поле не обновляется. Почему это?TextBox, не обновляющийся в C#

Это всего лишь небольшой проект моделирования для моего класса Computing. Он находится на ранних стадиях и, вероятно, ошибочен во многих местах!

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.Threading; 

namespace QueueSimulation 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     public void Form1_Load(object sender, EventArgs e) 
     { 
      MessageBox.Show("The form has loaded"); 
     } 

     public void goButton_Click(object sender, EventArgs e) 
     { 
      Initialisers init = new Initialisers(); 

      Customer customer = new Customer(); 

      customer.Arrive(); 
     } 

     private void stopButton_Click(object sender, EventArgs e) 
     { 
      // put code here to break out of the program 
     } 
    } 

    public class Customer : Initialisers 
    { 
     int waitingTime; 
     int arrivalTime; 
     int arrivalInterval; 

     Initialisers init = new Initialisers(); 


     public void Arrive() 
     { 
      Customer[] customer = new Customer[1000]; 
      int counter = 0; 
      for (int i = 1; i <= 10; i++) 
      { 
       customer[i] = new Customer(); 
       customer[i].TimeArrived(); 
       displayArrival.Text = displayArrival.Text + customer[i].TimeArrived().ToString(); 
       // Implement something to either show the time in the queue if needed 
       Thread.Sleep(init.CustomerArriveTime*100); 
      } 
      MessageBox.Show("All of the customers have arrived"); 
     } 

     public string TimeArrived() 
     { 
      return Convert.ToString(DateTime.Now); 
     } 

     public void Leave() 
     { 

     } 

     public void GetServed() 
     { 

     } 
    } 

    public class Server 
    { 
     bool servingStatus; 
     int servingTime; 

     public void Serve() 
     { 

     } 
    } 

    public class Initialisers : Form1 
    { 
     private int cust_no = 3; 

     public int CustomerArriveTime 
     { 
      get 
      { 
       return cust_no; 
      } 
      set 
      { 
       cust_no = value; 
      } 
     } 

     private int s_time = 4; 

     public int serveTime 
     { 
      get 
      { 
       return s_time; 
      } 
      set 
      { 
       s_time = value; 
      } 
     } 
    } 
} 
+0

Вы пробовали отладки? Мое предположение - клиент [i] .TimeArrived(). ToString() - это просто пустая строка каждый раз. – Peter 2010-12-07 10:29:54

+0

Даже когда я добавляю + «Тестирование»; к нему он ничего не отображает. – 2010-12-07 10:32:51

+0

Обнаружена проблема, см. Ответ ниже. Пожалуйста, отметьте правильный ответ, если таковой имеется. – Peter 2010-12-07 10:40:31

ответ

0

Перейти к Приложению экземпляр объекта текстового поля, созданного на вашем Form1.

public void Arrive(TextBox displayArrival) 

Почему вы наследуете Form1 в Initialiserz? В этом случае лучше передать ссылку на Form1 вместо наследования.

0

Это кажется слишком сложным. Попробуйте моделировать реальный мир. Что такое Инициализаторы, и почему у вас есть дерево наследования: Клиент> Инициализаторы> Форма1?

Вы являетесь клиентом, который пишет свой собственный текстовый блок, а не текстовый блок, который вы просматриваете (тот, который виден на форме).

Почему не существует метода Прибытие, которое устанавливает частное поле DateTime.Now. Затем попросите Заказчика TimeArrived, который возвращает это поле. В своей форме вызовите эти методы столько, сколько необходимо в вашем цикле.

Эта команда seperaties (Прибытие) из запроса (TimeArrived) + сохраняет ваше наследование более логичным.

Возможно, вам больше не нужны инициализаторы. И не позволяйте клиенту наследовать форму, потому что Клиент не является Формой.

0

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

Ваш клиент. Метод прибытия должен, вероятно, быть функцией внутри другого класса, например, ниже, клиент должен просто определить, что такое клиент. Обработка их должна обрабатываться другим классом.

class Customer 
{ 
    int waitingTime;   
    int arrivalTime;   
    int arrivalInterval; 

    // etc... 
} 

class ProcessCustomers 
{ 
    pubic void Arrive() 
    { 
     // etc... 
    } 
} 

public void goButton_Click(object sender, EventArgs e)    
{     
    Initialisers init = new Initialisers();      
    ProcessCustomers CustomerQueue = new ProcessCustomers();      
    CustomerQueue .Arrive();    
} 

Но для выпуска коробки текста вам придется выставить свойство в классе формы и установить его так,

string ArrivalTime 
{  
    get  
    {  
     return textBox1.Text;  
    }  
    set  
    {  
     textBox1.Text = value;  
    } 
} 
Смежные вопросы