从父节点访问用户控件元素

本文关键字:控件 元素 用户 访问 父节点 | 更新日期: 2023-09-27 18:18:40

我试图改变什么是可见的在我的用户控制通过检查一些复选框在我的形式(父)。我已经尝试改变它直接在父形式和在孩子的一方的功能。从调试开始,属性正在被更改,但在调用之后,属性似乎重置为默认值。

父端代码

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

    }
}

用户控制代码

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 
}

从父节点访问用户控件元素

好吧,这里是问题,你正在使用相同形式的多个实例。您应该创建一个实例并使用它。

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();
    }
    ...
}
}