Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从主窗体更新用户控件上的控件 背景_C#_User Controls_Listbox - Fatal编程技术网

C# 从主窗体更新用户控件上的控件 背景

C# 从主窗体更新用户控件上的控件 背景,c#,user-controls,listbox,C#,User Controls,Listbox,我有一个主窗体,它有一个tableLayoutPanel。其中我有三个面板,一个页眉、页脚和左侧栏。在剩余的空间中,我添加和删除了usercontrols,示例中的这个称为ctrlmanagepreset 在这些usercontrols中,我有一些控件。也就是一个列表框,我也在尝试添加项目 我从包含项目的xml文件中获取项目,并将其读入对象列表。然后将每个对象的名称添加到列表框中 所有的控件都是可以访问的,因为我已经公开了它们。我想这可能是因为我创建和添加它们的方式 问题: 为什么列表框不更新,

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

在这些usercontrols中,我有一些控件。也就是一个列表框,我也在尝试添加项目

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

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

问题: 为什么列表框不更新,显示添加的项目

代码 创建用户控件的按钮单击事件

 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;
            }
    }
public void PopulateCreateJob()
{
ctrlManagePresets ctrlManagePresets=新ctrlManagePresets();
//读入xml文件的内容
if(File.Exists(JoblistXmlFilepath))
{
XmlSerializer反序列化器=新的XmlSerializer(typeof(List));
TextReader=新的StreamReader(JoblistXmlFilepath);
//创建旧fave对象的列表
var xmlList=(列表)反序列化器。反序列化(读取器);
reader.Close();
如果(xmlList.Count>0)
{
foreach(xmlList中最喜欢的t)
{
//将喜爱的对象添加到组合框
尝试
{
ctrlmanagepresets.lbCreateJob.Items.Add(t.Name);
}
抓住
{
Show(@“XML中有一个没有名称的对象。”,@“Message”,
MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
}
}
ctrlmanagepresets.lbCreateJob.Refresh();
}
其他的
{
ctrlmanagepresets.lbCreateJob.Items.Add(@“未找到设置文件”);
ctrlmanagepresets.lbCreateJob.Enabled=false;
ctrlmanagepresets.lbCreateJob.BackColor=Color.DarkRed;
}
}

您没有将项添加到添加到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;
}