使用 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 开始时它从 0 开始。
每当我使用 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。
我的 MainForm 包含两个只读文本框和两个按钮,这两个按钮要么打开用户想要显示的 PizzaCreatorForms 实例,另一个按钮显示 PizzaOrdersListViewForm 的一个实例。两个只读文本框跟踪显示了多少 PizzaCreatorForm 实例(这部分有效),另一个跟踪正在创建多少项目(这也有效)。
我应该补充一点,PizzaCreatorForm 创建的每个对象都添加到 List<> 中,就像在 PizzaOrdersListViewFrom listView.Items 控件中一样。在 MainForm 和 PizzaOrderListViewForm 中还有一个清除 List<> 的清除按钮。
我的代码有效,但我 运行 遇到了两个问题。
每当在列表<>中添加一个新对象时,当我希望它从 1 开始时它从 0 开始。
每当我使用 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。