简体   繁体   English

从父级访问用户控制元素

[英]Access user control elements from parent

I am trying to change what is visible in my user control by checking some checkbox's in my form (the parent). 我正在尝试通过选中表单(父表单)中的某些复选框来更改用户控件中可见的内容。 I have tried changing it directly in the parent form and in a function on the child's side. 我尝试过直接以父级形式和孩子方面的功能对其进行更改。 From debug the property is being changed but then after the call the property seems to reset to the default value. 从调试开始,该属性被更改,但是在调用之后,该属性似乎重置为默认值。

My code on the parent side 我在父母那边的代码

public partial class Program: DevExpress.XtraBars.Ribbon.RibbonForm
{
    public Program()
    {
        InitializeComponent();
    }
    public class GlobalVariables
    {
        public static string categoryID = "1";
        public static string currentPage = "Campus";
    }

    private void ribbonControl1_MouseDown(object sender, MouseEventArgs e)
    {
        RibbonControl ribbon = sender as RibbonControl;
        RibbonHitInfo hitInfo = ribbon.CalcHitInfo(e.Location);
        if (hitInfo.HitTest == RibbonHitTest.PageHeader)
        {
            System.Diagnostics.Debug.WriteLine(hitInfo.Page.Name + "");
            pnlPanel.Panel2.Controls.Clear();
            if(hitInfo.Page.Name == "Campus")
            {
                var Campus = new WindowsFormsApplication1.Campus();
                pnlPanel.Panel2.Controls.Add(Campus);
                GlobalVariables.currentPage = "Campus";
            }
            else if (hitInfo.Page.Name == "Report")
            {
                var Report = new WindowsFormsApplication1.Report();
                pnlPanel.Panel2.Controls.Add(Report);
                GlobalVariables.currentPage = "Report";
            }
            else if (hitInfo.Page.Name == "Admin")
            {
                var Admin = new WindowsFormsApplication1.Admin();
                pnlPanel.Panel2.Controls.Add(Admin);
                GlobalVariables.currentPage = "Admin";
            }

        }
    }

    private void Program_Load(object sender, EventArgs e)
    {
        var Campus = new WindowsFormsApplication1.Campus();
        pnlPanel.Panel2.Controls.Add(Campus);

        List<string> Category = GenerateCategory();

        for(int j = 0; j<= Category.Count(); j++)
        {
            krpList.Items.Add(Category[j + 1]);
            krpValue.Items.Add(Category[j]);
            j++;
        }
    }

public void krpList_SelectedIndexChanged(object sender, EventArgs e)
        {
            int selectedIndex = krpList.SelectedIndex;
            krpValue.SelectedIndex = selectedIndex;
            GlobalVariables.categoryID = krpValue.SelectedItem + "";
            System.Diagnostics.Debug.WriteLine(krpValue.SelectedItem);
            Reset();  
        }

        public void Reset()
        {
            var Campus = new WindowsFormsApplication1.Campus();
            pnlPanel.Panel2.Controls.Clear();
            pnlPanel.Panel2.Controls.Add(Campus);
        }

        private void chkDisplay_EditValueChanged(object sender, EventArgs e)
        {
            string displayInfo = "";
            var Campus = new WindowsFormsApplication1.Campus();
            displayInfo = chkDisplay.Text;
            Campus.UpdateAudit(displayInfo);
            Campus.treeList1.ClearNodes();
        }


    }
}

User control code 用户控制码

public void UpdateAudit(string displayInfo) //Child Method
{
    treeList1.ClearNodes(); //Adjusting property on user control element
    treeList1.Columns[1].VisibleIndex = 1;
    treeList1.Columns[2].VisibleIndex = 2;
    //...more code similar to above 
}

Any help would be appreciated. 任何帮助,将不胜感激。

well, here is the problem, you are using multiple instances of same form. 好吧,这是问题所在,您正在使用相同形式的多个实例。 you should rather create a single instance and use it . 您应该创建一个实例并使用它。

public partial class Program: DevExpress.XtraBars.Ribbon.RibbonForm {

UserControl Campus = null;

 public Program()
    {
        InitializeComponent();
         Campus  = new WindowsFormsApplication1.Campus();
    }

 private void Program_Load(object sender, EventArgs e) {
  // remove this object creation
 //var Campus = new WindowsFormsApplication1.Campus();

        pnlPanel.Panel2.Controls.Add(Campus);
   ... 
}

 public void Reset() {
  // remove this object creation
 //  var Campus = new WindowsFormsApplication1.Campus();
}


private void chkDisplay_EditValueChanged(object sender, EventArgs e) {

 string displayInfo = "";
  // remove this object creation
 // var Campus = new WindowsFormsApplication1.Campus();
}

private void ribbonControl1_MouseDown(object sender, MouseEventArgs e)
    {
     ...
   if(hitInfo.Page.Name == "Campus")
            {
                // remove this object creation
                //var Campus = new WindowsFormsApplication1.Campus();

    }
    ...
}
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM