如何从子窗口更改menuStrip菜单文本?

时间:2012-06-17 21:31:36

标签: c# winforms mdi menustrip

我需要从子窗口更改主窗口(mdi容器)的menuStrip项目文本,

类似的东西:

  

文件
  -Login

  

文件
  -Logout

3 个答案:

答案 0 :(得分:3)

在主窗口上添加以下内容:

public static MainForm Current;

public string FileLogin
{
    get { return fileLoginToolStripMenuItem.Text; }
    set { fileLoginToolStripMenuItem.Text = value; }
}

显然,使用您为登录/注销菜单项设置或自动为菜单条项设置的名称。然后在主窗体的窗体构造函数中,设置Current。

public MainForm()
{
    InitializeComponent();
    Current = this;
}

然后从另一个窗口/表单中调用(设置值):

MainForm.Current.FileLogin = "Logout";

但优于此是您在子窗口上创建活动

public event Action UserLoggedIn = delegate { };

在MainForm上有MainForm订阅该事件与上述相反...

ChildForm.Current.UserLoggedIn += () => FileLogin = "Logout";

让孩子在用户使用UserLoggedIn()登录时举起活动。

答案 1 :(得分:2)

您可以向您的MDI容器添加一个可从其任何子级调用的公共方法 我们假设这个方法叫做SetLoggedStatus

(在MDI容器中)

public void SetLoggedStatus(bool status)
{
    ToolStripMenuItem loginMenu = MenuStrip1.Items(0) as ToolStripMenuItem:
    loginMenu.DropDownItems[0].Text = (status == true ? "Logout" : "Login");
}

现在我们需要从MDI Child表单中调用此公共方法。 每个MDIChild表单都有一个指向MDIParent的属性 我们可以使用该属性将通用表单实例转换为正确的MDI父级

(在登录后的MDIChild中,并假设MDIParent是一个名为MyParentForm的表单类)

MyParentForm f = this.MDIParent as MyParentForm;
if(f != null) 
    f.SetLoggedStatus(true);

答案 2 :(得分:1)

这是您可以从MDI Child访问主菜单项的方法:

// this button in the child form
private void button1_Click(object sender, EventArgs e) {  
   ToolStripMenuItem tsm;
   // file menu
   tsm = (ToolStripMenuItem)this.MdiParent.MainMenuStrip.Items[0];
   MessageBox.Show( tsm.DropDownItems[0].Name);
   // first menu under File Menu
   tsm.DropDownItems[0].BackColor = Color.Red;
   // second menu under File Menu
   tsm.DropDownItems[1].BackColor = Color.Wheat;
}

您可以以相同的方式更改字体或文字;而不是背面颜色,您可以使用.text