11. september 2016 - 22:21Der er
13 kommentarer og 1 løsning
passing data fra login to main form
Hej Eksperter... Jeg sidder og roder lidt med noget c# programmering og er stødt på et lille problem. Jeg kan ganske enkelt ikke gennemskue dette. og det generer mig rigtig meget.
Jeg har lavet et lille program hvor jeg skal logge ind. det virker fint nok den finder brugernavn og adgangskode fint i databasen. men mit problem er så når jeg vil gemme to værdier i en class og sende dem over i min main form. hvor den så skal have en refresh. Så den reloader og får ført data fra min classe ind der hvor de skal være. Kan ikke få den til det.
Min main form - Form1.cs ser således ud.
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using MySql.Data.MySqlClient;
namespace Hansen_Net { public partial class Form1 : Form { public Form1() { InitializeComponent(); if (UserDataLogin.loggedIn == "1") { label3.Text = UserDataLogin.loggedIn; label4.Text = UserDataLogin.UserID; toolStripStatusLabel1.Text = "Du er logget ind..."; } else { label3.Text = UserDataLogin.loggedIn; label4.Text = UserDataLogin.UserID; toolStripStatusLabel1.Text = "Du er ikke logget ind..."; } }
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using MySql.Data.MySqlClient;
namespace Hansen_Net { public partial class login : Form { private string _con = "server=localhost;database=hansen_net;userid=hansen_net;password=17012005;";
public login() { InitializeComponent(); }
private void _CheckLogin(string user, string pass) { MySqlConnection db_connect = new MySqlConnection(_con); db_connect.Open(); MySqlCommand cmd = new MySqlCommand(); cmd.CommandText = "select * from users where user=@user and pass=@pass"; cmd.Parameters.AddWithValue("@user", user); cmd.Parameters.AddWithValue("@pass", pass); cmd.Connection = db_connect; MySqlDataReader dr = cmd.ExecuteReader(); if(dr.Read()) { UserDataLogin.loggedIn = "1"; UserDataLogin.UserID = dr["user_id"].ToString(); Form1 frm1 = new Form1(); frm1.Refresh(); frm1.Validate(); frm1.Refresh(); this.Close(); } else { MessageBox.Show("Brugernavn/Adgangskode findes ikke!", "Login Information"); } }
også har jeg min classe fil som hedder UserDataLogin.cs som er den del der skulle gemme dataen i en variabel som så skulle kunne hentes ind i min main form automatisk. men virker ikke. Dataen bliver gemt men kan bare ikke få den frem i min main form. ved ikke hvad jeg har gjort forkert.
UserDataLogin.cs koden kommer her.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;
namespace Hansen_Net { class UserDataLogin { static string nm, add;
public static string loggedIn { get { return nm; } set { nm = value; } }
public static string UserID { get { return add; } set { add = value; } } } }
Jeg håber meget i kan hjælpe mig så jeg kan få det til at virke. For kan ikke gennemskue hvad jeg skal gøre for at det vil. Men kort fortalt så de værdier som bliver gemt i UserDataLogin.cs er dem som jeg skal have ind i min Form1 efter en refresh så den ændre tekst i statuslinien og at den skriver værdierne i mine label 3 og 4. Så jeg kan se under mine test at det er overført som det skal.
Håber i kan forstå hvad jeg mener og hvis ikke vil jeg gerne prøve at forklare mig lidt bedre.
Men hvorfor kan jeg så ikke tilgå de data som bliver gemt i min UserDataLogin.cs Når jeg laver en MessageBos.show("UserID : " + UserDataLogin.UserID + " LoggedIn : " + UserDataLogin.loggedIn, "Login Information");
Hvor jeg kalder dataen fra UserDataLogin.cs som kommer de frem i min MessageBox. Men der kommer ikke noget frem i min Main Form. Forstår det ikke
Skal lige siges at jeg har lavet den der MessageBox inden jeg lukker min login.cs og som vist kalder jeg dataerne fra min UserDataLogin.cs og de bliver vist. Men der sker bare intet i min mainform. hvilket egentlig undrer mig rigtig meget...
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using MySql.Data.MySqlClient;
namespace Hansen_Net { public partial class Form1 : Form { public Form1() { InitializeComponent(); if (UserDataLogin.loggedIn == "1") { label3.Text = UserDataLogin.loggedIn; label4.Text = UserDataLogin.UserID; toolStripStatusLabel1.Text = "Du er logget ind..."; } else { label3.Text = UserDataLogin.loggedIn; label4.Text = UserDataLogin.UserID; toolStripStatusLabel1.Text = "Du er ikke logget ind..."; } }
Det er fordi på din MainForm som bliver kaldt først, der assigner du de værdier din din UserDataLogin har oprindeligt ... du opdatere dem så i din anden dialog, men det ændre jo ikke at du stadig har kopieret dine oprindelige værdier over og dermed viser brugeren noget helt andet.
Nu er det ved at være 10 år siden jeg har lavet Win Forms sidst ... men du burde kunne sende din MainForm med over til din login og dermed opdatere din MainForm
Du kan lave en metode på din MainForm som du så kan kalde fra den Login form.
Jeg har fundet en midlertidig løsning som ser sådan her ud på min MainForm.
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using MySql.Data.MySqlClient;
namespace Hansen_Net { public partial class Form1 : Form {
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.