更新列表中项目的文本框控件数<>当使用自定义事件C#

时间:2017-06-07 23:02:32

标签: c# windows winforms windows-applications

我有一个包含两个只读文本框和两个按钮的MainForm,它们打开了用户想要显示的PizzaCreatorForms的多个实例,其他按钮显示了PizzaOrdersListViewForm的一个实例。两个只读文本框记录了PizzaCreatorForm的实例数量(此部分有效),另一个跟踪正在创建的项目数量(这也有效)。

我应该补充说,PizzaCreatorForm创建的每个对象都会添加到List<>中,就像在PizzaOrdersListViewFrom listView.Items控件中一样。 MainForm和PizzaOrderListViewForm中还有一个清除按钮,用于清除List<>。

我的代码有效,但我遇到了两个问题。

  1. 每当在列表<>中添加新对象时,如果我希望它从1开始,则从0开始。

  2. 每当我清除List<>使用PizzaOrderListViewForm中的清除按钮,清除listview控件项,但文本框显示相同的数字

  3. 这是我试图用于#2的自定义事件:

    的MainForm

        public partial class Form1 : Form
        { 
           public static List<Pizza> pizzaList = new List<Pizza>();
           public List<Pizza> PizzaList
           {
               get { return pizzaList; }
               set { pizzaList = value; }
           }
    
           //Where PizzaOrdersListViewForm is instantiated
           private void displayOrdersToolStripMenuItem_Click(object sender, EventArgs e)
           {
               PizzaOrdersListViewForm orderListV = new PizzaOrdersListViewForm();
    
    
           }
           //Where PizzaCreatorForm is instantiated
           private void newPizzaOrder_Click(object sender, EventArgs e)
           {
               PizzaCreatorForm pizzaForms = new PizzaCreatorForm(this);
               pizzaForms.PizzaInList += PizzaInListHandler;
               pizzasCreatedCounterTextBox.TextChanged += PizzaInListHandler;
           }
    
           public void PizzaInListHandler(object sender, EventArgs e)
           {
               pizzasCreatedCounterTextBox.Text = pizzaList.Count.ToString();        
           }
           public void ClearMainListChangeHandler(object sender, EventArgs e)
           {  
               pizzaList.Clear();
           }
        }
    

    PizzaCreatorForm

        public partial class PizzaCreatorForm : Form
        {
           public EventHandler PizzaInList;
    
           public Pizza Order
           {
               //Code that assigns Pizza class member variables to control values
           }
    
           Form1 MainForm = null;
    
           public PizzaCreatorForm(Form1 mForm)
           {
                InitializeComponent();
                MainForm = mForm
           }
    
           private void orderNewPizaaToolStripButton_Click(object sender, EventArgs e)
           {
                if(PizzaInList != null)
                {
                    PizzaInList(this, new EventArgs());
                }
    
                MainForm.PizzaList.Add(Order);
    
                Order = new Pizza();
           }
        }
    

    PizzaOrdersListViewForm

        public partial class PizzaOrdersListViewForm : Form
        {
           public EventHandler ClearMainList;
    
           Form1 mainForm = null;
    
           public PizzaOrdersListViewForm(Form1 TheMain)
           {
              InitializeComponent();
              mainForm = TheMain;
           }
    
           private void clearToolStripButton_Click(object sender, EventArgs e)
           {
              if(ClearMainList != null)
              {
                  ClearMainList(this, new EventArgs());
              }
              ClearMainList += mainForm.ClearMainListChangeHandler;
              pizzaListView.Items.Clear();
    
           }
    
        }
    

1 个答案:

答案 0 :(得分:0)

我所要做的就是将PizzaOrdersListViewForm ClearMainList EventHandler订阅到MainForm中displayOrdersToolStripMenuItem_Click方法内的自定义PizzaInListHandler方法。

private void displayOrdersToolStripMenuItem_Click(object sender, EventArgs e)
{
     PizzaOrdersListViewForm orderListV = new PizzaOrdersListViewForm();
     orderListV.ClearMainList += ClearMainListChangeHandler;
     orderListV.ClearMainList += PizzaInListHandler;
}

我弄清楚了pizzaList.Count的错误。当我应该选择带回List&lt;&gt;内的元素总数的Count时,我不小心使用了计算每个项目序列的Count。