【问题标题】:Update textbox control count of items inside a list<> when it's cleared using Custom Events C#使用自定义事件 C# 清除列表<>中的项目时更新文本框控件计数
【发布时间】:2017-06-09 21:01:47
【问题描述】:

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

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

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

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

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

这是我尝试用于#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();

       }

    }

【问题讨论】:

    标签: c# windows winforms windows-applications


    【解决方案1】:

    我所要做的就是将 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 来计算每个项目的序列。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多