C# 从另一个列表框更新列表框

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

我有两个Winforms admForm和projForm,每个都有一个列表框。在admForm内部,您可以在属于此表单的列表框中添加用户

到目前为止一切正常,但我想用admForm列表框中的对象更新projForm中的列表框

有什么想法吗

以广告形式:

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中的列表中显示的用户。