Como identificar a instância ativa de um formulário quando clicar no menustrip componente

StackOverflow https://stackoverflow.com//questions/10688750

  •  12-12-2019
  •  | 
  •  

Pergunta

Eu estou construindo uma espécie de protótipo de um aplicativo MDI.Eu tenho um formulário principal, chamado mainForm, e algumas outras formas de filho, todas as instâncias de um childForm de classe.Essas instâncias de minha childForm classe tem todo um básicas MenuStrip, de alguma forma\fechar, imprimir, etc toolStripMenuItems.

Ao clicar em tempo, como posso identificar a instância do childForm classe está segurando ativado toolStripMenuItem?

EDITAR:seguinte traço comentário

O pseudo-código tenha esta aparência:

Form myNewForm = new Form()
MenuStrip myNewMenu = new MenuStrip()
...
myNewForm.Controls.Add(myNewMenu)
myNewForm.MainMenuStrip = myNewMenu
Foi útil?

Solução

Dado o meu comentário original e sua atualização, a seguir funciona para mim:

  Form newChildForm = new Form();
  newChildForm.Name = "ChildForm";
  MenuStrip newMenu = new MenuStrip();

  ToolStripItem newItem = newMenu.Items.Add("New Item");
  newItem.Click += new EventHandler(newItem_Click);

  newChildForm.Controls.Add(newMenu);
  newChildForm.MainMenuStrip = newMenu;

  newChildForm.Show();

Em seguida, o manipulador de eventos:

void newItem_Click(object sender, EventArgs e)
{
  ToolStripItem clickedItem = sender as ToolStripItem;

  MenuStrip parentMenu = clickedItem.Owner as MenuStrip;

  Form childForm = parentMenu.FindForm() as Form;
  //childForm.Parent is also "ChildForm";

}

Você está fazendo algo diferente?

Outras dicas

Kudos para o traço, que deve ter sido postado como resposta.

Vou assumir que você está dentro do evento click do item de menu...

Control s = sender as Control;//the sender object from the click event
ChildForm activeForm = s.FindForm() as ChildForm;

Isso daria a uma instância específica do formulário que você está procurando.

como alternativa, o evento de clique de botão DEVE ser implementada a partir de ChildForm própria classe, o que significa que, durante qualquer evento de clique, o "este" operador deve SER, na verdade, a instância específica do ChildForm classe que está sendo ativado.

ChildForm activeForm = this;

o que é totalmente desnecessário atribuição, mas não ilustrar o ponto.Isto não seria verdade se o seu menu de strip foi localizado em algum outro usuário personalizada recipiente de controle, que no caso você precisaria de algo como isso.

ChildForm activeForm = this.ParentForm;

o ParentForm propriedade é exclusiva para o 'ContainerControl", que é definido como um controle que pode conter outros controles, e identifica a base de "forma" em que o recipiente está sendo exibido.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top