从主窗体更新用户控件的控件

时间:2015-09-28 19:40:35

标签: c# user-controls listbox

背景

我的主表单有tableLayoutPanel。在其中我有三个面板,一个页眉,页脚和左侧栏。在剩余的空间中,我添加并删除了usercontrols,示例中的这个名为ctrlmanagepreset

在这些用户控件中,我有控件。即Listsbox,我也试图添加项目。

我从xml文件中获取项目,该文件包含项目并将其读入对象列表。然后将每个对象的名称添加到列表框中。

所有控件都可以访问,因为我公开了它们。我想这可能是由于我创建和添加它们的方式?

问题

为什么列表框没有更新,显示添加的项目?

代码

创建usercontrol的按钮点击事件

 public void btnManage_Click(object sender, EventArgs e)
        {
            tableLayoutPanel.Controls.Add(new ctrlManagePresets () { Dock = DockStyle.Left }, 1, 1);
            PopulateCreateJob();

        }

填充列表框的方法

 public void PopulateCreateJob()
        {

            ctrlManagePresets ctrlmanagepresets = new ctrlManagePresets();

            //read in contents of xml file
            if (File.Exists(JoblistXmlFilepath))
            {

                XmlSerializer deserializer = new XmlSerializer(typeof (List<Favourite>));
                TextReader reader = new StreamReader(JoblistXmlFilepath);

                //create list of old fave objects

                var xmlList = (List<Favourite>) deserializer.Deserialize(reader);

                reader.Close();

                if (xmlList.Count > 0)
                {
                    foreach (Favourite t in xmlList)
                    {
                        //add favourite objects to combobox
                        try
                        {
                            ctrlmanagepresets.lbCreateJob.Items.Add(t.Name);
                        }
                        catch
                        {
                            MessageBox.Show(@"There is an object with no name in the XML.", @"Message",
                                MessageBoxButtons.OK,
                                MessageBoxIcon.Error);
                        }
                    }
                }
                ctrlmanagepresets.lbCreateJob.Refresh();
            }
            else
            {
               ctrlmanagepresets.lbCreateJob.Items.Add(@"Settings File Not Found");
               ctrlmanagepresets.lbCreateJob.Enabled = false;
               ctrlmanagepresets.lbCreateJob.BackColor = Color.DarkRed;
            }
    }

1 个答案:

答案 0 :(得分:1)

您没有将项目添加到您添加到tableLayoutPanel的控件实例中。

让你的PopulateCreateJob返回使用xml数据构建和初始化的实例

public void btnManage_Click(object sender, EventArgs e)
{
    ctrlManagePresets ctrl = PopulateCreateJob();
    ctrl.Dock = DockStyle.Left; 
    tableLayoutPanel.Controls.Add(ctrl, 1, 1);
}


public ctrlManagePresets PopulateCreateJob()
{
    ctrlManagePresets ctrlmanagepresets = new ctrlManagePresets();
    // current code that initialize the instance of your control
    ....

    // return the control instance initialized to the caller
    return ctrlmanagepresets;
}