我有一个包含两个只读文本框和两个按钮的MainForm,它们打开了用户想要显示的PizzaCreatorForms的多个实例,其他按钮显示了PizzaOrdersListViewForm的一个实例。两个只读文本框记录了PizzaCreatorForm的实例数量(此部分有效),另一个跟踪正在创建的项目数量(这也有效)。
我应该补充说,PizzaCreatorForm创建的每个对象都会添加到List<>中,就像在PizzaOrdersListViewFrom listView.Items控件中一样。 MainForm和PizzaOrderListViewForm中还有一个清除按钮,用于清除List<>。
我的代码有效,但我遇到了两个问题。
每当在列表<>中添加新对象时,如果我希望它从1开始,则从0开始。
每当我清除List<>使用PizzaOrderListViewForm中的清除按钮,清除listview控件项,但文本框显示相同的数字
这是我试图用于#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();
}
}
答案 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。