NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Erik Maslák
Člen
Avatar
Erik Maslák:21.10.2021 17:38

Zdravím, potreboval by som poradiť s posielaním informácií medzi UserControls a Form. Vopred sa ospravedlňujem ak tu je už takáto téma a zbytočne zakladám novú. Môj problém spočíva v tom, že pri spustení aplikácií sa mi spusti Form1 kde je panel na ktorý volám UserControls. V tom UserControls je vlastne Login/Register. Keď sa prihlásim alebo registrujem, tak to všetko funguje v pohode, ale ja potrebujem z toho UserControls aby po prihlásení prenieslo do už otvoreného Form1 ( ktorý je vlastne hlavný porgram ) informácie. V podstate to sú len informácie true/false a nejaký label aby sa prepísalo. Vopred ďakujem za všetky rady.

Zkusil jsem: Skúsal som to nejako takto:

Form1

public void PrihlasitSaClick()
        {
            if (prihlaseny)
            {
                PrihlasenyUzivatel.Visible = false;
                PrihlasenyUzivatel.Text = "Uzivatel";
                PrihlasitSa_Label.Text = "Prihlásiť sa / Registrovať sa";
                prihlaseny = false;
            }
            else
            {
                ukazatel = 9;
                ZobrazovaciPanel.Controls.Clear();
                Registracia RegUC = new Registracia();
                ZobrazovaciPanel.Controls.Add(RegUC);
                RegUC.Dock = DockStyle.Fill;
            }
        }
UserControls:

Form1 frm = new Form1();
private void Prihlasenie()
        {
            if (PrihlasovacieMeno.Text == "" && PrihlasovacieHeslo.Text == "")
            {
                MessageBox.Show("Meno a heslo musia byť vyplnené !!");
            }
            else
            {
                if (this.OpenConnection() == true)
                {
                    int i = 0;
                    MySqlCommand cmd = connection.CreateCommand();
                    cmd.CommandType = CommandType.Text;
                    cmd.CommandText = "select * from Uzivatelia where Meno='" + Sifrovat.encrypt(PrihlasovacieMeno.Text) + "' and Heslo='" + Sifrovat.encrypt(PrihlasovacieHeslo.Text) + "'";
                    cmd.ExecuteNonQuery();
                    DataTable dt = new DataTable();
                    MySqlDataAdapter da = new MySqlDataAdapter(cmd);
                    da.Fill(dt);
                    i = Convert.ToInt32(dt.Rows.Count.ToString());
                    if (i == 0)
                    {
                        PrihlasovacieMeno.Text = "";
                        PrihlasovacieHeslo.Text = Text = "";
                        MessageBox.Show("Chybné prihlasovacie údaje !");
                        this.CloseConnection();
                    }
                    else
                    {
                        this.CloseConnection();
                        File.WriteAllText(@"AktivnyUzivatel.txt", PrihlasovacieMeno.Text);
                        PrihlasovacieMeno.Text = "";
                        PrihlasovacieHeslo.Text = Text = "";
                        frm.ZmenaStavuPrihlasenia(true);
                    }
                }
                else
                {
                    MessageBox.Show("Nastala neočakávaná chyba !");
                    this.CloseConnection();
                    frm.ZmenaStavuPrihlasenia(false);
                }
            }
        }

A opäť do Form1

public void ZmenaStavuPrihlasenia(bool stav)
        {
            this.prihlaseny = stav;
            if (stav)
            {
                this.PrihlasitSa_Label.Text = "Odhlásiť sa";
                this.PrihlasenyUzivatel.Text = File.ReadAllText(@"AktivnyUzivatel.txt");
                this.PrihlasenyUzivatel.Visible = true;
            }
        }

Myslím si, že je chyba asi tu: Form1 frm = new Form1().. to ako keby vytváram na novo ten Form1 ale neviem ako dosiahnuť aby to zapísalo do už otvoreného Form1. Skúšal som hľadať aj na google ale nič sa mi nedarí :/

 
Odpovědět
21.10.2021 17:38
Avatar
Ghst
Člen
Avatar
Ghst:22.10.2021 13:39

Form1 je třída, normální třída, nic ti nebrání uvnitř vytvořit proměnnou "stav", ke které v kódu můžeš přistoupit

frm.stav

Nicméně předpokládám, že v nějakém hlavním formuláři otevíráš přihlašovací formulář, jako ho otevíráš? Například se dá použít vlastnost "DialogResult".

 
Nahoru Odpovědět
22.10.2021 13:39
Avatar
Erik Maslák
Člen
Avatar
Erik Maslák:22.10.2021 21:14

Už som našiel spôsob ako mi to funguje :D Ak by niekoho zaujímalo ako, tak nižšie dám kód. Rovno mi môžete keď tak povedať, že či to je dobré riešenie alebo ani nie. Ale aj tak veľmi pekne ďakujem za odpoveď.

Hlavný Form ( Form 1 )

Registracia RegUC;
.
.
.
.
private void PrihlasitSaClick()
        {
            if (prihlaseny)
            {
                PrihlasenyUzivatel.Visible = false;
                PrihlasenyUzivatel.Text = "Uzivatel";
                PrihlasitSa_Label.Text = "Prihlásiť sa / Registrovať sa";
                prihlaseny = false;
            }
            else
            {
                ukazatel = 9;
                ZobrazovaciPanel.Controls.Clear();
                RegUC = new Registracia(this);
                ZobrazovaciPanel.Controls.Add(RegUC);
                RegUC.Dock = DockStyle.Fill;
            }
        }

A potom v UserControls:

Form1 frm;
public Registracia(Form1 f)
        {
            InitializeComponent();
            frm = f;
        }
.
.
.
.
private void Prihlasenie()
        {
            if (PrihlasovacieMeno.Text == "" && PrihlasovacieHeslo.Text == "")
            {
                MessageBox.Show("Meno a heslo musia byť vyplnené !!");
            }
            else
            {
                if (this.OpenConnection() == true)
                {
                    int i = 0;
                    MySqlCommand cmd = connection.CreateCommand();
                    cmd.CommandType = CommandType.Text;
                    cmd.CommandText = "select * from Uzivatelia where Meno='" + Sifrovat.encrypt(PrihlasovacieMeno.Text) + "' and Heslo='" + Sifrovat.encrypt(PrihlasovacieHeslo.Text) + "'";
                    cmd.ExecuteNonQuery();
                    DataTable dt = new DataTable();
                    MySqlDataAdapter da = new MySqlDataAdapter(cmd);
                    da.Fill(dt);
                    i = Convert.ToInt32(dt.Rows.Count.ToString());
                    if (i == 0)
                    {
                        PrihlasovacieMeno.Text = "";
                        PrihlasovacieHeslo.Text = Text = "";
                        MessageBox.Show("Chybné prihlasovacie údaje !");
                        this.CloseConnection();
                    }
                    else
                    {
                        this.CloseConnection();
                        File.WriteAllText(@"AktivnyUzivatel.txt", PrihlasovacieMeno.Text);
                        PrihlasovacieMeno.Text = "";
                        PrihlasovacieHeslo.Text = Text = "";
                        frm.ZmenaStavuPrihlasenia(true);
                    }
                }
                else
                {
                    MessageBox.Show("Nastala neočakávaná chyba !");
                    this.CloseConnection();
                    frm.ZmenaStavuPrihlasenia(false);
                }
            }
        }
 
Nahoru Odpovědět
22.10.2021 21:14
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.