2012-06-17 25 views

回答

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

+0

謝謝,我使用第一種方法,我無法進行第二項工作。 – Zar

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子窗體該公共方法。 每個MDIChild形式具有指向回的MdiParent 我們可以使用該屬性鑄造的一般形式實例正確的MDI父

屬性(登錄後在MDIChild和假設的的MdiParent是一個名爲MyParentForm窗體類)

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

這是如何從一個MDI子進入主菜單項:

// 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