【问题标题】:Update a listbox from another listbox从另一个列表框更新列表框
【发布时间】:2013-12-29 22:07:41
【问题描述】:

我有两个 Winform(admForm 和 projForm),每个都有一个列表框。在 admForm 中,您可以在属于该表单的列表框中添加用户。

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

有什么想法吗?

在 admForm 中:

public string ListBox
{
    get { return lstUserOrProject.Items.ToString(); }
}

在 projForm 中:

private void UpdateList()
{
    AdminForm admForm = new AdminForm();
    lstAvailableUser.Items.Add(admForm.ListBox.ToString());
}

打开projForm的代码:

    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;
        }
    }

【问题讨论】:

  • 这两种形式有什么关系?它们都显示在一起?一种形式打开另一种形式?
  • 是的,您可以在 admForm 中打开 projForm。您还可以在 admForm 中添加一个显示在 admForm 中的列表中的用户。

标签: c# winforms listbox


【解决方案1】:

这里:

AdminForm admForm = new AdminForm();

您正在创建全新的实例。

如果您在 AdminForm 之后打开 projForm,则在显示表单时使用此代码:

ProjForm projForm = new ProjForm();  // change ProjForm if your form class name is different
projForm.Show(this);

然后在您的 projForm 中,您可以像这样访问您的 listBox:

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 中更新你的列表时,调用你的更新方法:

projForm.UpdateList();

【讨论】:

  • 然后我收到两条错误消息:无法使用实例引用访问成员 AdminForm.ListBox.get';改为使用类型名称对其进行限定非静态字段、方法或属性“KanBanBoard.AdminForm.lstUserOrProject”需要对象引用
  • 嗯,你认为lstUserOrProject.Items.ToString(); 会返回什么?
  • 对不起,我是新手,想象一下它应该返回列表框中的项目吗?
  • 不,绝对不,假设我们谈论的是 WinForms ListBox,Items 属性是一个 ObjectCollection。将 ToString 应用于 ObjectCollection 会返回“System.Windows.Forms.ListBox+ObjectCollection”
  • 所以我不应该拥有我的财产?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多