D3POD Posted August 30, 2013 at 08:14 PM Report #523034 Posted August 30, 2013 at 08:14 PM (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 August 30, 2013 at 08:17 PM by D3POD
Solution nelsonr Posted August 30, 2013 at 08:28 PM Solution Report #523037 Posted August 30, 2013 at 08:28 PM 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(); } 1 Report
D3POD Posted August 31, 2013 at 01:00 PM Author Report #523061 Posted August 31, 2013 at 01:00 PM (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 September 18, 2013 at 08:32 AM by apocsantos
nelsonr Posted August 31, 2013 at 02:16 PM Report #523068 Posted August 31, 2013 at 02:16 PM 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"
D3POD Posted August 31, 2013 at 05:25 PM Author Report #523079 Posted August 31, 2013 at 05:25 PM Boa tarde, com esse código obtive um erro: http://img197.imageshack.us/img197/9205/kqrj.png Como posso ultrapassar isto?
nelsonr Posted August 31, 2013 at 08:51 PM Report #523085 Posted August 31, 2013 at 08:51 PM 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?
D3POD Posted August 31, 2013 at 09:24 PM Author Report #523086 Posted August 31, 2013 at 09:24 PM (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 September 18, 2013 at 08:32 AM by apocsantos
nelsonr Posted August 31, 2013 at 10:10 PM Report #523089 Posted August 31, 2013 at 10:10 PM 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?
D3POD Posted August 31, 2013 at 11:48 PM Author Report #523099 Posted August 31, 2013 at 11:48 PM 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...
nelsonr Posted September 1, 2013 at 12:19 AM Report #523100 Posted September 1, 2013 at 12:19 AM Mas o erro que indicaste no #5 é na linha this.Hide()? De certeza???
D3POD Posted September 1, 2013 at 12:25 PM Author Report #523111 Posted September 1, 2013 at 12:25 PM Não, o erro é na linha é aqui: ((Form1)this.Parent).btn_adicionar.Visible = true;
nelsonr Posted September 1, 2013 at 02:27 PM Report #523116 Posted September 1, 2013 at 02:27 PM 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
D3POD Posted September 1, 2013 at 04:10 PM Author Report #523123 Posted September 1, 2013 at 04:10 PM Sim, está no form 2 e o código está todo a cima :-$ O teu código está igual ao meu acima?
rumbafum Posted September 1, 2013 at 08:14 PM Report #523138 Posted September 1, 2013 at 08:14 PM 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(); } 1 Report
D3POD Posted September 2, 2013 at 05:23 PM Author Report #523208 Posted September 2, 2013 at 05:23 PM Boa tarde, muito obrigado 🙂 rumbafum era mesmo isso.
Ralado Posted October 17, 2019 at 11:48 PM Report #616375 Posted October 17, 2019 at 11:48 PM 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
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now