c# boolean variale sturen vanuit ander form

  • Onderwerp starter Onderwerp starter MvbC
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

MvbC

Gebruiker
Lid geworden
21 jan 2011
Berichten
9
Hallo,

Als newby met c# ben ik op het volgende probleem gestuit waar ik geen oplossing voor kan vinden.

Ik wil een boolean in het hoofd form wijzigen van uit het tweede form, een inlog form.

Welke code moet ik opnemen om de boolean, MainControl, van false op true te zetten?
Dit is de code die ik in mijn hoofd form heb opgenomen. Deze heb ik bewust hier opgenomen omdat ik in mijn hoofd form meerdere control buttons visible wil krijgen na inloggen.
Als de bool MainControl is gezet in het 2e form, houdt hij dit dan ook vast nadat dat form gesloten is?

Code:
    public partial class Form1 : Form
    {

        public bool MainControl;

        public Form1()
        {

            InitializeComponent();

            if (MainControl == false)
            {
                this.OpenPhone.Visible = false;
            }
            else
            {
                this.OpenPhone.Visible = true;
            }

        }

Ook een goede tutorial hierover heb ik niet kunnen vinden helaas.
Bedankt alvast.
 
Laatst bewerkt:
Probeer het hiermee in een ander form eens:

Code:
Form1 frm = new Form1();
frm.Show();
if (frm.MainControl == false)
{
//doen wat je wilt
}
//je kan het ook zo doen:
bool tempbool = frm.MainControl
//en dan heb je de bool van de MainControl in ''tempbool''
 
Probeer het hiermee in een ander form eens:

Code:
Form1 frm = new Form1();
frm.Show();
if (frm.MainControl == false)
{
//doen wat je wilt
}
//je kan het ook zo doen:
bool tempbool = frm.MainControl
//en dan heb je de bool van de MainControl in ''tempbool''

Dank je wel CaptainBri,

Hij opent met Show() het form nogmaals maar ik kan de bool nog niet aanpassen vanuit het 2e form. Ik heb ook nog even ShowDialog, Setting, Update en Validate geprobeerd maar dat is het ook niet.
Als je nog suggesties hebt...

Code in 2e form:
Code:
        private void LoginLocal_Click(object sender, EventArgs e)
        {
            if (UsernameInput.Text != "" && PasswordInput.Text != "")
            {
                if (UsernameInput.Text == "abc" && PasswordInput.Text == "123")
                {
                    Form1 frm = new Form1();
                    frm.Validate();

                    if (frm.MainControl == false)
                    {
                        frm.MainControl = true;
                    }

                    this.Close();
                }
            }
            else
            {
                MessageBox.Show("Ongeldige gebruikersnaam of wachtwoord", "Waarschuwing",
                MessageBoxButtons.OK,
                MessageBoxIcon.Warning);
            }
        }

En de code in mijn eerste form:

Code:
    public partial class Form1 : Form
    {

        public bool MainControl;

        public Form1()
        {

            InitializeComponent();

            if (MainControl == false)
            {
                this.OpenPhone.Enabled = false;
                this.OpenLog.Enabled = false;
                this.emailToolStripMenuItem.Enabled = false;
            }
            else
            {
                this.OpenPhone.Enabled = true;
                this.OpenLog.Enabled = true;
                this.emailToolStripMenuItem.Enabled = true;
            }

        }

Bedankt!
 
Probeer dit eens? Bij mij werkt het perfect!

Dit in je 2e form:
Code:
   Form1 f = new Form1();
            MessageBox.Show(Convert.ToString(f.ChangeMe));
            f.ChangeMe = true;
            MessageBox.Show(Convert.ToString(f.ChangeMe));

Dit in je eerste form:

Code:
public bool ChangeMe = false;
 
Probeer dit eens? Bij mij werkt het perfect!

Dit in je 2e form:
Code:
   Form1 f = new Form1();
            MessageBox.Show(Convert.ToString(f.ChangeMe)); // waarom een messagebox? snap dat niet.
            f.ChangeMe = true;
            MessageBox.Show(Convert.ToString(f.ChangeMe));

Dit in je eerste form:

Code:
public bool ChangeMe = false;// Volgens mij moet de bool geen vaste waarde krijgen, standaard is een bool false of 0

Mogelijk ben ik niet duidelijk genoeg met mijn uitleg.
Form1:
Hierin staat mijn login button die een form2 opent waar je in kunt loggen.

Form 2:
Hier worden gebruikersnaam en wachtwoord ingevuld en vergeleken. Bij akkoord moet hij een boolean in Form1 veranderen zodat de andere knoppen die ik wil gebruiken enabled worden. Daarna sluit form 2 zichzelf.

Ik moet dus een public bool in form 1 vanuit form 2 kunnen -bedienen-.

Ik had iets gevonden over classes die de verschillende forms aan elkaar koppelen waardoor de public variabelen bij elkaar gezet kunnen worden. Dit was alleen met name een lap tekst en geen code waar ik helaas geen soep van koken kon.

Maar wederom bedankt voor het advies.
 
Laatst bewerkt:
Een 'simpele' oplosing voor dit probleem zou kunnen zijn door de variabele uit form1 mee te geven aan form2 als reference (onder van parameter passing)
Je form2 wordt dan iets wat hierop zou kunnen lijken:

Code:
private bool firstFormBool = false;

public form2(ref bool myBool) {
  firstFormBool = myBool;
}

private void doSomething() {
  firstFormBool = true;
  //Other functionality
}
Heb dit niet uit kunnen testen, dus zal misschien niet 100% werken, maar dit is wel een principe waar je iets mee kunt als ik het zo zie.
Hier een link over parameter passing
 
Door flink wat zoeken en lezen heb ik de volgende oplossing gevonden. Misschien heeft iemand er nog wat aan. Bedankt voor het meedenken.

Mainform:

Code:
namespace NrkComCenter
{
    public partial class Form1 : Form
    {

        public bool MainControl = false;

        LoginForm form2;

        public Form1()
        {

            InitializeComponent();

            OpenPhone.Enabled = false;
            OpenLog.Enabled = false;
            emailToolStripMenuItem.Enabled = false;

        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void loginbutton_Click(object sender, EventArgs e)
        {
            
            form2 = new LoginForm(this);
            form2.ShowDialog();

            if (MainControl)
            {
                OpenPhone.Enabled = true;
                OpenLog.Enabled = true;
                emailToolStripMenuItem.Enabled = true;

            }
        }

        private void OpenPhone_Click(object sender, EventArgs e)
        {
            // openen telefoonlijst scherm
        }

        private void OpenLog_Click(object sender, EventArgs e)
        {
            // openen logging scherm
        }

        private void OpenApp_Click(object sender, EventArgs e)
        {
            // openen apparatuur scherm
        }

        private void emailToolStripMenuItem_Click(object sender, EventArgs e)
        {
            EmailProp setemail = new EmailProp();
            setemail.Show();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            timer1.Interval = 1000;
            clock1.Text = DateTime.Now.ToLongTimeString();
        }

    }
}
Loginform:

Code:
namespace NrkComCenter
{
    public partial class LoginForm : Form
    {

        Form1 form1;

        public LoginForm(Form1 F)

        {
            InitializeComponent();

            form1 = F;
        }

        private void Inloggen_Load(object sender, EventArgs e)
        {

        }

        private void LoginLocal_Click(object sender, EventArgs e)
        {
            if (UsernameInput.Text != "" && PasswordInput.Text != "")
            {
                if (UsernameInput.Text == "abc" && PasswordInput.Text == "123")
                {

                    form1.MainControl = true;

                }
                this.Close();

            }
            else
            {
                MessageBox.Show("Ongeldige gebruikersnaam of wachtwoord", "Waarschuwing",
                MessageBoxButtons.OK,
                MessageBoxIcon.Warning);
            }
        }

        private void LoginGlobal_Click(object sender, EventArgs e)
        {
            if (UsernameInput.Text != "" && PasswordInput.Text != "")
            {
                if (UsernameInput.Text == "abc" && PasswordInput.Text == "123")
                {

                    form1.MainControl = true;

                }
                this.Close();
            }
            else
            {
                MessageBox.Show("Ongeldige gebruikersnaam of wachtwoord", "Waarschuwing",
                MessageBoxButtons.OK,
                MessageBoxIcon.Warning);
            }
        }

        private void LoginCancel_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan