2017-05-08 4 views
-3

Ich bin Anfänger in C#. Ich habe einige Schaltflächen, die standardmäßig im Hauptformular deaktiviert sind. Nachdem der Benutzer sich angemeldet hat, möchte ich, dass er aktiviert und für den Benutzer verfügbar ist. Es ist eine Art Zugriffsmodifikator.wie einige Tasten zu aktivieren, wenn Benutzeranmeldung in C#

Die Schaltflächen befinden sich im Hauptformular und das Anmeldeformular befindet sich in einem anderen Formular. Nach dem Benutzer eine Login-Button (Überprüfung der Benutzername und Passwort) gedrückt möchte ich diese Taste im Haupt form.below ermöglichen ist mein Code

 private void btnLogic_Click(object sender, EventArgs e) 
    { 
     FormSettingLogic f2 = new FormSettingLogic(); 
     f2.Owner = this; 
     f2.Show(); 
    } 


    private void btnAddFile_Click(object sender, EventArgs e) 
    { 
     FormLogin fl = new FormLogin(); 
     fl.Owner = this; 
     .... 
     .... 
    } 

private void btnLoadManteg_Click(object sender, EventArgs e) 
    { 
     Form_LoadMantegh f6 = new Form_LoadMantegh(); 
     f6.Owner = this; 
     f6.Show(); 
    } 

und Login-Code des Benutzers

public FormLogin() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 



     String abc; 

     try 
     { 
      sqlConnection1.Open(); 
      SqlCommand cmd = new SqlCommand("select * from [Users] where [email protected] and password = @Pass ", sqlConnection1); 

      SqlDataAdapter sda; 
      sda = new SqlDataAdapter(); 
      sda.SelectCommand = cmd; 
      sda.SelectCommand.Parameters.AddWithValue("@uName", txtUname.Text); 
      sda.SelectCommand.Parameters.AddWithValue("@Pass", txtpass.Text); 
      abc =Convert.ToString (cmd.ExecuteScalar()); //execute the query and get the user Id and put it in abc variable 
      DataTable dt = new DataTable(); 
      sda.Fill(dt); 
      sqlConnection1.Close(); 
      if (dt.Rows.Count == 0) 
      { 
       MessageBox.Show("Username or Password is incorrect!"); 
      } 
      else 
      { 

       this.Hide(); 
       //MessageBox.Show(abc); 
       sendID.send = abc; 

       (this.Owner as Form_Main).btnAddFile.Enabled = true; 
       (this.Owner as Form_Main).btnLogic.Enabled = true; 

      } 



     } 

     catch(Exception err) 
     { 
      MessageBox.Show(err.Message); 
     } 

Form_Main_load Code:

private void Form_Main_Load(object sender, EventArgs e) 
    { 

     btnLogic.Enabled = false; 
     btnAddFile.Enabled = false; 
     btnLoadManteg.Enabled = false; 

    } 

und der Fehler ist: „Objektverweis nicht auf eine Instanz eines Objekts“

+0

Haben Sie schon irgendwas ausprobiert? Ein Weg wäre, die Information über eine 'bool'-Flagge oder das' DialogResult' an das Hauptformular zurück zu geben und gemäß dieser Flagge zu handeln. Oder Sie können die Instanz des Hauptformulars an das Anmeldeformular übergeben und die Schaltflächen direkt bearbeiten (was ein wenig unordentlich ist). –

+0

Machen Sie eine 'public static Boole'sche Variable 'in Ihrem Hauptformular und ändern Sie nach erfolgter Anmeldung über das zweite Formular den booleschen Wert auf' true', was bedeutet, dass die Schaltflächen aktiviert sein sollten. – Nofuzy

+0

Mögliches Duplikat von [Zugriff auf ein Formularsteuerelement für ein anderes Formular?] (Http://stackoverflow.com/questions/4822980/how-to-access-a-form-control-for-another-form) –

Antwort

0

Wenn der Benutzer den Anmeldesatz userName übergibt, aber der Benutzer den Anmeldesatz userName nicht auf Null übergeben kann

+0

was ist, wenn der Benutzername beim ersten Versuch falsch war und der Benutzer beschließt, das zu stornieren Login-Vorgang Dann würde die Schaltfläche immer noch freigegeben werden, um sichtbar zu sein, und die Anmeldung wird nutzlos ... –

+0

Sie haben Recht, aber ich dachte, dass er dies tun könnte, "wenn Benutzer den Anmeldesatz userName übergeben, aber Benutzer den Anmeldesatz userName nicht auf null übergeben kann " –

Verwandte Themen