C# 从父级访问用户控件元素

C# 从父级访问用户控件元素,c#,winforms,user-controls,parent,C#,Winforms,User Controls,Parent,我试图通过选中表单(父控件)中的一些复选框来更改用户控件中可见的内容。我尝试过直接在父窗体和子窗体的函数中更改它。从调试开始,属性正在更改,但在调用之后,属性似乎重置为默认值 我的代码在父端 public partial class Program: DevExpress.XtraBars.Ribbon.RibbonForm { public Program() { InitializeComponent(); } public class Glo

我试图通过选中表单(父控件)中的一些复选框来更改用户控件中可见的内容。我尝试过直接在父窗体和子窗体的函数中更改它。从调试开始,属性正在更改,但在调用之后,属性似乎重置为默认值

我的代码在父端

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

    }
    ...
}
}

我猜想,您显示的表单和使用的表单是两个不同的实例。您能在编写var Campus=new WindowsFormsApplication1.Campus()的地方添加完整的代码吗。。。。我认为应该是某个事件处理程序。@Rabi请在请求时查找完整代码。我不完全遵循这个建议。类级别的var类型的变量如果没有声明为public,将无法工作。请详细说明您的建议应该如何工作?您是否也删除了此处的对象创建:if(hitInfo.Page.Name==“Campus”){var Campus=new WindowsFormsApplication1.Campus();是的,我删除了对原始校园变量的所有引用。这只会停止所有代码的工作,因此用户控件不再使用此代码进行刷新。此解决方案很简单,应该可以工作,除非代码中存在其他问题。我已设法使其与您所说的内容一起工作。但是我没有能够调用校园用户控件上的方法或控件。我很可能在某个地方出错。我基本上使用的是校园。[methodnamehere]();但找不到方法。有什么建议吗?
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();

    }
    ...
}
}