Мне нужно изменить текст элемента menuStrip главного окна (mdi-контейнера) из дочернего окна,
что-то вроде этого:
Файл
-Войти
to
Файл
-Выйти
Мне нужно изменить текст элемента menuStrip главного окна (mdi-контейнера) из дочернего окна,
что-то вроде этого:
Файл
-Войти
to
Файл
-Выйти
В главном окне добавьте это:
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()
.
Вы можете добавить в свой 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);
Вот как вы можете получить доступ к пунктам главного меню из дочернего 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
.