【发布时间】:2017-02-06 03:39:48
【问题描述】:
我有两个表单需要相互交互。父窗体有 4 个字段和一个添加按钮,用于将每个字段中的数据保存到类对象的实例中。将其保存到对象后,该对象将存储在子窗体包含的列表框中。我创建了一个自定义事件来处理这些东西,但我肯定做错了什么。
应该发生的是,当两个窗口都打开并且列表框中有数据时,从子表单列表框中选择的任何项目都会使用来自该对象的数据填充父表单字段。当我测试我的代码时,只有第一项具有正确填写正确字段的数据。如果我在第一次选择后单击任何其他项目,则主表单字段根本不会更新。
针对我的问题,子表单具有以下代码:
public EventHandler ListBoxItemClicked;
private void pPotionList_SelectedIndexChanged(object sender, EventArgs e)
{
PotionForm tempMain = new PotionForm(); //this was a test, nothing changed
pPotionList.SelectionMode = SelectionMode.One;
if (ListBoxItemClicked != null)
{
ListBoxItemClicked(this, new EventArgs());
}
tempMain.Refresh(); // this too
}
父窗体有这些代码
private void pListDisplay_Click(object sender, EventArgs e)
{
PotionList secForm = new PotionList();
secForm.secFormBox.DataSource = potionBindList;
PotionListChanged += secForm.HandlePotionListChanged;
secForm.ChildPotionListChanged += HandleChildPotionListChanged;
secForm.ListBoxItemClicked += HandleListBoxItemClicked; //this line
secForm.Show();
}
public void HandleListBoxItemClicked(object sender, EventArgs e)
{
pTypeInput.SelectedItem = aPotion._type;
pMagInput.Value = aPotion._magnitude;
pNameInput.Text = aPotion._name;
pBonusInput.Checked = aPotion._bonus;
}
如果相关,我目前正在使用 Visual Studio Community 2015。
【问题讨论】:
-
需要更多信息!:
PotionForm tempMain是什么?父母ListBox的名字是什么?secForm.secFormBox是什么?potionBindList是什么类型的? -
aPotion在哪里初始化? -
PotionForm tempMain这是父表单的一个实例,我试图用它来刷新主表单,以便在选择所选项目时可以使用新信息刷新它。secForm.secFormBox这是子窗体的一个实例,也是子窗体的列表框。potionBindList这是BindingList<T> -
aPotion在public partial class PotionForm : Form { }内初始化 -
到目前为止,它看起来就像您将在子控件中刷新一个全新的
PotionForm实例,而不是您看到的打开窗口的实例。您是否尝试过在父窗体的HandleListBoxItemClicked方法中调用this.Refresh()?从您发布的代码中也不清楚aPotion的值如何变化。 “用来自该对象的数据填充父表单字段”该部分在您发布的代码中完全丢失。