我正在尝试在 MS Visual Studios 中编写一个简单的 C# 密码保护实用程序。我在 formA 中有一个 listView,我想使用 formB 将新项目添加到列表中。
FormB 调用作为 formA 成员的 forceAdd。forceAdd 然后更新数据集并尝试通过调用 populateList() 来刷新 listView。
问题是 listView 不会反映更改,直到我通过 formA 中的按钮或复选框调用我的 populateList() 函数。
例如,我可以在我的代码中调用 populateList() 50 次,但无济于事,但只要我从 formA 上的按钮调用它,它就可以工作。
(DieselPass = fromA,newForm = FormB,newForm::Save 调用 forceAdd,formA::new 打开 newForm)
(当我连接 formA::Edit... 按钮以填充并在保存后单击它时,listView 会更新)
我是新用户......这张图片解释了它:http: //i50.tinypic.com/wk6bys.jpg
public void forceAdd(String a, String u, String p)
{
accountsDataSet.tblAccounts.AddtblAccountsRow(a, u, p);
tblAccountsTableAdapter.Update(accountsDataSet.tblAccounts);
populateList();
}
private void populateList()
{
//make sure data set is up to date
this.tblAccountsTableAdapter.Fill(this.accountsDataSet.tblAccounts);
//clear existing items
listView1.Items.Clear();
for (int i = 0; i < accountsDataSet.tblAccounts.Count; i++)
{
String[] wtf;
if (maskPasswords)
wtf = new string[] { accountsDataSet.tblAccounts[i].Account, accountsDataSet.tblAccounts[i].Username };
else
wtf = new string[] { accountsDataSet.tblAccounts[i].Account, accountsDataSet.tblAccounts[i].Username, accountsDataSet.tblAccounts[i].Password };
lvi = new ListViewItem(wtf);
Console.WriteLine(lvi.ToString());
listView1.Items.Add(lvi);
}
}
我已经尝试过的事情包括:
listView1.Update();
listView1.BeginUpdate();
...
listView1.EndUpdate();
listView1.Refresh();
listView1.Clear();
listView1.RedrawItems(0,i,t/f);
this.Update();
this.Refresh();
任何帮助或提示将不胜感激,谢谢。
更多代码:
FormA 在 formB 中设置参考:
myNewForm.getForm = this;
FormB 对 formA 的引用:
private mainForm myForm = new mainForm();
public mainForm getForm
{
get { return myForm; }
set { myForm = value; }
}
FormB 调用 FormA 的函数:
myForm.forceAdd(accountBox.Text.ToString(), usernameBox.Text.ToString(), passwordBox.Text.ToString());
这是我需要执行“调用/委托”的实例吗?
编辑2:
对不起,我不够清楚,FormB调用FormA::populateList()
,我将控制台输出放在函数中以确认这一点,它成功地将项目添加到数据集中但不会刷新列表。它就像它知道这是一个不会让它刷新的外部形式。
我还公开了 populateList,没用
即使在调用之后, Visual Studio 也不会让我打电话pupulateList()
给我,我必须包含一些东西还是以其他方式传递它?(mainForm)this.Parent.
myNewForm.ShowDialog(this);
我通过作品引用formA myForm
,而不是更新列表..?
编辑3:这也不起作用:
((mainForm)this.Parent).populateList();