мне нужно изменить MenuStrip пункт текста главного окна (МДИ контейнера) в из дочернего окна,Как изменить текст меню menuStrip из дочернего окна?
что-то вроде этого:
Файл
-login
в
-Logout
мне нужно изменить MenuStrip пункт текста главного окна (МДИ контейнера) в из дочернего окна,Как изменить текст меню menuStrip из дочернего окна?
что-то вроде этого:
Файл
-login
в
-Logout
В главном окне добавить следующее:
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 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
.
Спасибо, я использую первый метод, я не мог выполнить вторую работу. – Zar