C# 如何从MDI子级禁用条形菜单项

C# 如何从MDI子级禁用条形菜单项,c#,winforms,mdi,toolstripmenu,C#,Winforms,Mdi,Toolstripmenu,我有一个带有条形菜单的父窗体,名为topMenu 我有一个名为“SignIn”的子表单,当用户登录时,我想禁用topMenu.item.logIn并启用topMenu.item.Logout 如何从子窗体禁用父容器的topMenu 当用户单击条形菜单项“登录”时,将执行以下代码 private void signInToolStripMenuItem_Click(object sender, EventArgs e) { var newMDIChild = new SignIn();

我有一个带有条形菜单的父窗体,名为
topMenu

我有一个名为“SignIn”的子表单,当用户登录时,我想禁用
topMenu.item.logIn
并启用
topMenu.item.Logout

如何从子窗体禁用父容器的
topMenu

当用户单击条形菜单项“登录”时,将执行以下代码

private void signInToolStripMenuItem_Click(object sender, EventArgs e)
{
    var newMDIChild = new SignIn();

    // Set the Parent Form of the Child window.
    newMDIChild.MdiParent = this;

    newMDIChild.Dock = DockStyle.Fill;
    // Display the new form.
    newMDIChild.Show();

}
用户输入用户名和密码后,执行以下代码

public partial class SignIn : Form
{
    public SignIn()
    {
        InitializeComponent();
    }

    private void btn_signin_Click(object sender, EventArgs e)
    {
        UserInfo.Autherized = true;

        // here I want to disable the sign in menu item
        // and enable the sign out menu item which is located on the parent form
        this.Close();
    }
}

我更希望父窗体从子窗体获取所需的数据,而不是子窗体对父窗体了解太多并修改其上的控件

在登录表单中添加一个属性,该属性返回用户是否经过身份验证。(如果
UserInfo
是公共的,并且可以从登录表单外部引用,则只需使用它并跳过此步骤。)

然后读取该值,并在登录表单关闭时采取适当的操作。(这订阅了登录表单关闭时执行的事件,并告诉它运行一些代码。)


有更简单的方法可以做到这一点,比如只实例化一个新的登录表单,并使用
ShowDialog()
而不是设置MdiParent和docking等等,但这应该适用于您现有的代码。

登录是一个标准表单一旦登录成功,我想禁用菜单项。你的意思是我可以重新加载父窗体并在加载方法中处理条件吗?从顶部的条带菜单。什么代码?当用户单击它时,它只是菜单中的一项,它会打开一个子窗体。它起作用了:)谢谢。我有几个问题。为什么要添加一个属性来返回UserInfo.Autherized的值,而不是执行
if(UserInfo.Autherized==true).
另外
FormClosed+=delegate
具体做什么?它是否在SignIn()表单关闭后执行操作?是的UserInfo.Autherized是公共的,因此我将直接访问它。太好了,非常感谢:)
public bool IsUserAuthenticated
{
    get { return UserInfo.Autherized; }
}
private void signInToolStripMenuItem_Click(object sender, EventArgs e)
{
    var si = new SignIn();
    si.MdiParent = this;
    si.Dock = DockStyle.Fill;
    si.FormClosed += delegate
                     {
                         if (si.IsUserAuthenticated)
                         {
                             yourLoginItem.Enabled = false;
                             yourLogoutItem.Enabled = true;
                         };
                     }
    si.Show();
}