C# 从另一个列表框更新列表框
我有两个Winforms admForm和projForm,每个都有一个列表框。在admForm内部,您可以在属于此表单的列表框中添加用户 到目前为止一切正常,但我想用admForm列表框中的对象更新projForm中的列表框 有什么想法吗 以广告形式:C# 从另一个列表框更新列表框,c#,winforms,listbox,C#,Winforms,Listbox,我有两个Winforms admForm和projForm,每个都有一个列表框。在admForm内部,您可以在属于此表单的列表框中添加用户 到目前为止一切正常,但我想用admForm列表框中的对象更新projForm中的列表框 有什么想法吗 以广告形式: public string ListBox { get { return lstUserOrProject.Items.ToString(); } } 以项目形式: private void UpdateList() { Ad
public string ListBox
{
get { return lstUserOrProject.Items.ToString(); }
}
以项目形式:
private void UpdateList()
{
AdminForm admForm = new AdminForm();
lstAvailableUser.Items.Add(admForm.ListBox.ToString());
}
private void btnAdd_Click(object sender, EventArgs e)
{
int index = lstUserOrProject.SelectedIndex;
switch (cmbUserOrProject.SelectedIndex)
{
case (int)UserOrProject.Projects:
ProjectForm proj = new ProjectForm("Add Project");
if (proj.ShowDialog() == DialogResult.OK)
{
projMngr.AddProject(proj.ProjectData);
UpdateProject();
}
break;
case (int)UserOrProject.Users:
UserForm user = new UserForm("Add User");
if (user.ShowDialog() == DialogResult.OK)
{
userMngr.AddUser(user.UserData);
UpdateUser();
}
break;
}
}
打开projForm的代码:
private void UpdateList()
{
AdminForm admForm = new AdminForm();
lstAvailableUser.Items.Add(admForm.ListBox.ToString());
}
private void btnAdd_Click(object sender, EventArgs e)
{
int index = lstUserOrProject.SelectedIndex;
switch (cmbUserOrProject.SelectedIndex)
{
case (int)UserOrProject.Projects:
ProjectForm proj = new ProjectForm("Add Project");
if (proj.ShowDialog() == DialogResult.OK)
{
projMngr.AddProject(proj.ProjectData);
UpdateProject();
}
break;
case (int)UserOrProject.Users:
UserForm user = new UserForm("Add User");
if (user.ShowDialog() == DialogResult.OK)
{
userMngr.AddUser(user.UserData);
UpdateUser();
}
break;
}
}
在这里:
您正在创建一个全新的实例
如果在AdminForm之后打开projForm,则在显示表单时使用以下代码:
ProjForm projForm = new ProjForm(); // change ProjForm if your form class name is different
projForm.Show(this);
然后,在projForm中,您可以访问列表框,如下所示:
private void UpdateList()
{
var items = Owner.lstUserOrProject.Items; // Owner represents your admin form
lstAvailableUser.Items.Clear();
foreach(var item in items)
{
lstAvailableUser.Items.Add(item);
}
}
更新:
在AdminForm中将此定义移动到页面顶部,我的意思是:
class AdminForm : Form
{
// move your definition here
ProjForm projForm = new ProjForm(); // change ProjForm if your form class name is different
}
然后,当您要显示表单时,请调用:
projForm.Show(this);
如果要更新项目表单中的列表,请调用更新方法:
projForm.UpdateList();
然后我收到两条错误消息:无法使用实例引用访问Member AdminForm.ListBox.get;使用类型名称限定它,而非静态字段、方法或属性“KanBanBoard.AdminForm.lstUserOrProject”需要对象引用。嗯,你认为lstUserOrProject.Items.ToString是什么;返回?对不起,我是新手,想象一下它应该返回listbox中的项吗?不,绝对不,假设我们讨论的是WinForms listbox,items属性是ObjectCollection。将ToString应用于ObjectCollection会返回System.Windows.Forms.ListBox+ObjectCollections我不应该拥有我的属性吗?这两个表单之间的关系是什么?它们都在一起展示吗?一个表单打开另一个表单?是的,在admForm中可以打开projForm。您还可以在admForm中添加在admForm中的列表中显示的用户。