簡體   English   中英

從主窗體更新用戶控件上的控件

[英]Update Control on User Control from Main Form

背景

我有一個具有tableLayoutPanel的主窗體。 在其中,我有三個面板,一個頁眉,頁腳和左側欄。 在剩余的空間中,我添加和刪除usercontrols ,在示例中,此usercontrols稱為ctrlmanagepreset

在這些用戶控件中,我具有控件。 即Listsbox,我也在嘗試添加項目。

我從確實包含項目的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;
            }
    }

您沒有將項目添加到添加到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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM