MENUSTRIP - CONTROLANDO A PROPRIEDADE CHECKED

LUIS.HERRERA 23/03/2012 21:26:49
#398131
Tentei de várias formas e não consegui:

1- Criei uma solucion e dentro delas 3 projetos
2- O projeto 1 é um MDI Pai que tem um MenuStrip para acessar forms filhos de:
a) proprio projeto MDI Pai;
b) projeto 2 (um outro EXE) que será um módulo de recursos (dividir a aplicação para não sobrecarregar com tudo num único EXE e acelerar o carregamento inicial)
c) projeto 3 (uma DLL) que será um segundo módulo de recursos
3- cada forma será aberto como form child e ao ser acionado pelo menustrip o item do menu ficará ticado para não permitir abrir uma segunda vez o mesmo form.

Problemas:
1- Só consegui abrir os forms child do próprio projeto MDI pai, os dos outros EXE e DLL da solução não consegui.

2- Ao abrir um form child, no item correspondente do menu eu seto ele com checked = true. Porém ao fechar o form correspondente, não consegui fazer o item do menu receber o checked = false. Não sei como acessar esse item.

LUIS.HERRERA 27/03/2012 09:23:19
#398380
Bem amigos, bom dia!

Apesar de não ter conseguido nenhuma reposta nos 5 fóruns que pesquisei, e depois de 5 dias [Ô]Vasculhando[Ô] a Web, consegui resolver apenas o problema 2 até o momento.

Como não desejo que ninguém perca tanto tempo assim para descobrir como, pois parece que ninguém passou por isso ainda... Deixo aqui a solução para [Ô] Quem Precisar Possa! [Ô], como diria o mestre Jedi Yoda.


Solução:
Depois de passar 4 dias inteiros pesquisando na Web lendo centenas de páginas, colocar o problema em 5 foruns (e em nenhum ter uma resposta), descobrir que no Net (apesar de ter muitos recursos prontos para uso) é preciso:

1- Descobrir que existe o que se quer
2- Descobrir como se usar
3- Descobrir onde usar
4- Descobrir a sintaxe correta para se usar

Então posso dizer que não está fácil (...)

é muito simples depois que se sabe (claro meu caro Padawam, como diz nosso amigo Kerplunk (rs)).

No item do menu que você usar para abrir um form, inclui nele o código que será executado somente no momento que o próprio form filho for fechado, assim:

[txt-color=#0000f0]f.Closed += delegate { this.botaoQueAbreEsteForm.Checked = false; };[/txt-color]

Então o exemplo completo é:

No Item do MenuSript do Form MDI Pai:

 
[txt-color=#007100]// método ativado pelo clique no item do menuStrip[/txt-color]
private void lerArquivoServidorToolStripMenuItem_Click(object sender, EventArgs e)
{
[txt-color=#007100]//Cria nova instância da classe formulário que vai abrir[/txt-color]
frmLerArquivoServidor frm = new frmLerArquivoServidor();
[txt-color=#007100]//Define que a instância é um form filho do MDI[/txt-color]
frm.MdiParent = this;
[txt-color=#007100]//Aqui você seta a propriedade Checked como (ticada) do item do menu selecionado (form aberto)[/txt-color]
lerArquivoServidorToolStripMenuItem.Checked = true;
[txt-color=#007100]//AQUI O PULO DO GATO - define que quando o form aberto for fechado, a propriedade volta ao estado sem (tic)[/txt-color]
frm.Closed += delegate{this.lerArquivoServidorToolStripMenuItem.Checked = false;};
[txt-color=#007100]//Exibe a instância do novo form filho[/txt-color]
frm.Show();
}


Nota: também é possível usar o comando dessa forma [Ô]mais elegante[Ô]:

[txt-color=#0000f0]frm.Closed += delegate{this.lerArquivoServidorToolStripMenuItem.Checked = !(this.lerArquivoServidorToolStripMenuItem.Checked);};[/txt-color]

Ou seja, se está selecionada tira a seleção, sendo que o mesmo poderia ser feito no início ao ticar assim:

[txt-color=#0000f0]this.lerArquivoServidorToolStripMenuItem.Checked = !(this.lerArquivoServidorToolStripMenuItem.Checked);[/txt-color]

Espero que ninguém tenha de sofrer tanto para encontrar algo tão simples como isso, então está aqui a solução., Vou até mudar o título para facilitar futuras pesquisas.
Tópico encerrado , respostas não são mais permitidas