使用 Custom Events C# 清除列表 <> 中的项目时,更新文本框控制计数

Update textbox control count of items inside a list<> when it's cleared using Custom Events C#

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

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

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

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

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

这是我尝试用于 #2 的自定义事件:

主窗体

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

       }

    }

我所要做的就是将 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<> 内元素总数的 Count 时,我不小心使用了计算每个项目序列的 Count。