Jump to content
D3POD

[Resolvido] Alterar controls de outro form

Recommended Posts

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á :)

Edited by D3POD

Share this post


Link to post
Share on other 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();
}

Share this post


Link to post
Share on other 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.

Edited by apocsantos

Share this post


Link to post
Share on other 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"

Share this post


Link to post
Share on other 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?

Share this post


Link to post
Share on other 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 :)

Edited by apocsantos

Share this post


Link to post
Share on other 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?

Share this post


Link to post
Share on other 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...

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other sites
D3POD

Sim, está no form 2 e o código está todo a cima :-$

O teu código está igual ao meu acima?

Share this post


Link to post
Share on other 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();

	 }

Share this post


Link to post
Share on other sites
Ralado
Em 31/08/2013 às 11:16, nelsonr disse:

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"

 

Em 02/09/2013 às 14:23, D3POD disse:

Boa tarde, muito obrigado :)

rumbafum era mesmo isso.

e quando o botoao esta em uma panel como faço

como uso este mesmo codigo so que meu botao esta em um panel

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.