Jump to content

Alterar controls de outro form


Go to solution Solved by nelsonr,

Recommended Posts

Posted (edited)

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
  • Solution
Posted

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();
}
  • Vote 1
Posted (edited)

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
Posted

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"

Posted (edited)

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
Posted

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...

Posted

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();

	 }
  • Vote 1
  • 6 years later...
Posted
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

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.