Inquiridor
Botão que não ativa seu formulário

Pergunta
-
Preciso criar um botão (herado de Button por exemplo) que ao ser clicado dispare o evento de Click porém não ative o seu formulário caso este esteja desativado.
Pesquisando na rede encontrei uma maneira de fazer isso em relação a outros programas mas não funciona em relação aos formulários do mesmo programa.
Exemplo: Se eu colocar o código abaixo numa aplicação e abrir também o Notepad sendo que o Notepad estiver com a tela ativa, ao clicar no botão da minha aplicação o evento de click do botão é executado e o Notepad continua sendo o programa/formulário ativo. Porém se eu tiver dois forms abertos na mesma aplicação (uma aplicação MDI) ao clicar no botão o formulário "parent" desse botão é ativado.
Eis o código implementado no Form que contém o botão:
protected override CreateParams CreateParams
{
get
{
CreateParams baseParams = base.CreateParams;
baseParams.ExStyle |= (WinMessages.WS_EX_NOACTIVATE);
return baseParams;
}
}
Ufa... será que fui claro?... alguém tem alguma dica?
Tytto
- Movido Olavo Oliveira Neto quinta-feira, 5 de abril de 2012 14:07 Amigo, estou movendo sua thread para um fórum especifico de Windows Forms (De:.NET Development - Geral)
Todas as Respostas
-
Faz o seguinte, vamos ver se eu entendi, tenho uma solução:
Você tem dois forms, o Fom1 que está ativo e o Form2 que está aberto e tem um botão mas não está ativo, coloque o evento de clique do botão do Form2 como público acesse-o pelo Form1, o Form1 continuará ativo! Olhe esse exemplo:
Form1
public partial class Form1 : Form { Form2 _Form2 = new Form2(); public Form1() { InitializeComponent(); _Form2.Show(); } private void button1_Click(object sender, EventArgs e) { _Form2.button1_Click(null, null); } }
Form2
public partial class Form2 : Form { public Form2() { InitializeComponent(); } public void button1_Click(object sender, EventArgs e) { //aqui vai seu pr´rocedimento, aqui eu estou mudando o txto do botão button1.Text = "Teste"; } }
Abraços! Espero ter te ajudado!
thiagokoelho
-
Na verdade não é bem isso.
Imagine que eu tenho uma aplicação chamada AppX e ela esta rodando e no Deactivate do formulário principal tem uma linha de código que diz que quando o formulário for desativado deverá fechar a aplicação.
No entando, antes de abrir a aplicação AppX, eu abri a aplicação Ap0. Neste neste caso, na Ap0 existe um botao que chama a AppX.
Se eu clicar no botao da Ap0, a AppX será chamada e o formulario principal da AppX ficará ativo.
Ai está o problema... pois quando eu clicar num outro botao da Ap0 o formulário principal da AppX será desativado e neste caso fechará a AppX.
Resumindo: O que preciso e que ao clicar no botao ele não ative o seu formulario Parent.
Será que deu para entender?
To travado nesse problema para resolver uma integração grande em aplicativos específicos.
Tytto
-
Tytto, acho que isso não será possível porque sempre que voce clica no botão de alguma tela ela é ativada, o que você pode fazer é quando ela for ativada, desativar novamente ou o mais prático seria usar as apis do windows por exemplo a SendMessage para enviar um comando para o botão dessa outra aplicação dessa forma ele não ativaria. Se foi isso que entendi o que quer dizer.
Bruno Ferreira de Souza
MSP - Microsoft Student Partner
MCTS .NET Framework - Windows Applications
MCPD .NET Framework - Windows Applications
MCC - Microsoft Community Contributor
www.maestrodotnet.com.br
@BrunoMaestro -
Na verdade é exatamente isso.
Se fixer um override do método WndProc e não executar a herança da classe base quando a Message for WM_NCHITTEST ou WM_NCPAINT a princípio funciona a questão do foco, porém o controle passa a não fazer mais nada (não reconhece eventos de click, de foco...).
Pela lógica eu acho que somente algum tipo de message deveria ser interceptada ou algum outro SendMessage em substiruição dela.... mas qual message?
Desde já agradeço a sua ajuda.
Tytto
-
Dá uma olhada nesses exemplos:
http://www.vbforums.com/showthread.php?t=667139
http://www.devasp.net/net/articles/display/690.html
Bruno Ferreira de Souza
MSP - Microsoft Student Partner
MCTS .NET Framework - Windows Applications
MCPD .NET Framework - Windows Applications
MCC - Microsoft Community Contributor
www.maestrodotnet.com.br
@BrunoMaestro