Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

D3POD

[Resolvido] Alterar controls de outro form

Mensagens Recomendadas

D3POD

Boas, esta minha dúvida vem de encontro a dois problemas que estou a ter e surgiu ao tentar resolver um dos problemas.

Estou a criar um sistema de login na minha aplicação.

O problema é que pretendo que dois forms arranquem ao mesmo tempo e por isso no evento Load do form principal chamei o form do login.

Aqui começou o primeiro problema pois se tiver o form principal como maximized o outro fica por trás... e eu pretendia que este 2º ficasse à frente, pois será ai que o utilizador irá colocar as suas credenciais.

Ora andava aqui a testar e surgiu-me então o segundo problema que é...

Enquanto o utilizador não colocar os dados e não for validado como correcto, todos os componentes do form principal (que estariam como background) estariam invisíveis e só quando o login fosse feito é que apareceriam... O problema é, como é que através do form login altero a propriedade visible de por exemplo de um botão no form principal.

Cumprimentos e obrigado desde já :)

Editado por D3POD

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nelsonr

Boas,

isso resolves se abrires o form de login como dialog.

O problema é que se colocares o form de login a abrir no form load do principal, este fica escondido até fechares o form de login.

Se não houver problema, podes fazer assim, no form principal:

private void Form1_Load(object sender, EventArgs e)
{
frmLogin frmlogin = new frmLogin();
frmlogin.ShowDialog();
//
if (!frmlogin.AutenticouCorrectamente)
{
	// Login falhado
	frmlogin.Close();
	Application.Exit();
	return;
}

// Login ok
}

E no form de login, algo assim:

public bool AutenticouCorrectamente = false;

private void button1_Click(object sender, EventArgs e)
{
// Se cancelou o login
this.AutenticouCorrectamente = false;
this.Hide();
}

private void button2_Click(object sender, EventArgs e)
{
// Se efectuou correctamente o login
this.AutenticouCorrectamente = true;
this.Hide();
}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
D3POD

Boas, muito obrigado já consegui :)

Diz me só mais uma coisa sff, como posso do form login alterar a propriedade visible de um control no outro form?

Editado...

Estou a tentar assim:

private void button1_Click(object sender, EventArgs e)
 {

	 Form1 f1 = new Form1();
	 f1.Controls["btn_adicionar"].Visible = true;
	 this.Hide();

 }

mas não acontece nada... o formlogin ( que é onde o botão estão) desaparece, mas no form1 não aparece o botão.

Editado por apocsantos

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nelsonr

Ai nesse exemplo estás a alterar as propriedades de um form que acabaste de criar.

Podes aceder ao form "pai" usando o this.Parent. Algo assim:

((Form1)this.Parent).btn_adicionar.Visible = false;

Atenção que os controlos por default estão como privados e não ficam acessiveis de fora.

Para que consigas aceder ao btn_adcionar, tens de alterar a propriedade "Modifiers" do controlo e colocar como "Public"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nelsonr

Podes mostrar o código que usaste para abrir o form de login?

E colocaste apenas aquele código no evento do botão ou misturaste com o que tinhas?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
D3POD

Boas, no form principal tenho assim:

private void Form1_Load(object sender, EventArgs e)
 {
	 this.Top = 0;
	 this.Left = 0;
	 this.Width = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width;
	 this.Height = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height;
	 Form2 fr2 = new Form2();
	 fr2.ShowDialog();

 }

No evento do botão:



No evento click do botão ainda tenho que colocar o sistema de login, que está quase finalizado, mas tenho estado a testar numa aplicação à parte para não interferir.


private void button1_Click(object sender, EventArgs e)
 {

	 ((Form1)this.Parent).btn_adicionar.Visible = false;
	 this.Hide();

 }

No evento do botão ainda não coloquei mais nada, pois estou a fazer o sistema de login numa outra aplicação :)

Editado por apocsantos

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nelsonr

Tenho exactamente o mesmo código que mostras ai e não há problema.

Podes fazer debug e verificar se a linha em que está a dar erro é a que esconde o botão?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
D3POD

Boas, estes this.hide(); é referente ao form do login.

Desculpa, enganei-me ao andar aqui a testar e acabei por colocar o código mal:

private void button1_Click(object sender, EventArgs e)
 {


		 ((Form1)this.Parent).btn_adicionar.Visible = true;
		 this.Hide();

 }

A diferença é que á pouco publiquei com o visible = false, quando deveria ser para colocar visível.

A ideia é ao fazer o login e só se o login for feito correctamente, então aparecer os botões...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nelsonr

E esse evento está no Form2?

Deve haver ai mais alguma coisa que esteja a provocar esse problema. Testei aqui com o codigo que mostrei e funcionou bem

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
rumbafum

altera o teu código para usar a noção de owner do form e não parent.

Alteras para:

private void Form1_Load(object sender, EventArgs e)
	 {
			 this.Top = 0;
			 this.Left = 0;
			 this.Width = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width;
			 this.Height = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height;
			 Form2 fr2 = new Form2();
			 fr2.ShowDialog(this);

	 }

e

private void button1_Click(object sender, EventArgs e)
	 {


					 ((Form1)this.Owner).btn_adicionar.Visible = true;
					 this.Hide();

	 }

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.