Как изменить текст меню menuStrip из дочернего окна?

Мне нужно изменить текст элемента menuStrip главного окна (mdi-контейнера) из дочернего окна,

что-то вроде этого:

Файл
-Войти

to

Файл
-Выйти


person Zar    schedule 17.06.2012    source источник


Ответы (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().

person Chuck Savage    schedule 17.06.2012
comment
Спасибо, я использую первый метод, у меня не получилось сделать второй. - person Zar; 19.06.2012

Вы можете добавить в свой 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);
person Steve    schedule 17.06.2012

Вот как вы можете получить доступ к пунктам главного меню из дочернего 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.

person Angel Wings    schedule 08.09.2012