C# 从另一个UserControl引用UserControl

C# 从另一个UserControl引用UserControl,c#,winforms,C#,Winforms,我在这个项目中有一些嵌入式用户控件,我一直在使用,当我试图访问父控件中的按钮状态时,我的返回值并不是我所期望的 var parentControl = (OrderDetail)this.Parent.Parent; // set return based on the OrderDetail control button state UltraButton btn = parentControl.Controls.Find("btnReturn", true

我在这个项目中有一些嵌入式用户控件,我一直在使用,当我试图访问父控件中的按钮状态时,我的返回值并不是我所期望的

 var parentControl = (OrderDetail)this.Parent.Parent;

        // set return based on the OrderDetail control button state
        UltraButton btn = parentControl.Controls.Find("btnReturn", true).FirstOrDefault() as UltraButton;
它总是将btn.Enabled=true返回给我,即使表单完成时,我在这里引用的按钮没有启用。这里有没有我不知道的生命周期

深入研究winforms对我来说很少见,所以我肯定我遗漏了一些东西,只是还不确定它是什么


谢谢

将我的代码放入OnVisibleChanged事件中

protected override void OnVisibleChanged(EventArgs e)
    {
        base.OnVisibleChanged(e);

        if (Visible && !Disposing)
        {
            // set return change option based on the OrderDetail control button state
            UltraButton btn = parentControl.Controls.Find("btnReturn", true).FirstOrDefault() as UltraButton;

            if (btn != null && (HasPermissions && btn.Enabled))
                actionAllowed = true;
        }
    }

没有足够的代码来帮助您。这个.Parent.Parent在自找麻烦。UserControls不应该真正与其他UserControls对话。如果真的需要相互对话,最好在UserControls中设置一个属性引用,并让母窗体将属性连接在一起。我不确定btn.Enabled是否应该为false,除非手动取消设置。结果表明,即使是细节用户控件的加载也会在设置按钮之前触发,这只是您了解winforms的一个方面。通过检查子用户控件的OnVisibleChange事件中的状态,我能够得到我想要的。谢谢你的帮助。