Visual Studio 2017 Problem z ukryciem okna logowanie

0

Witam mam zapewne proste pytanie lecz ja nie wiem jak go rozwiązać.
Stworzyłem formę 1 która zawiera kontroli login i hasło .
Hasło i login odczytuje z bazy danych.
Stworzyłem klasę session aby nie można było zalogować się bez poprawnego hasła i loginu.
Natomiast forma 2 to program zasadniczy.
do tego miejsca program działa poprawnie ale po zalogowaniu pozostaje widoczne okno logowania ,jeśli zamknę to okno zamyka się cały program.
Chciałbym aby po zalogowaniu okno logowania znikało /ukrywało się, czy coś w tym rodzaju czy ktoś może mi pomóc

1

Po pierwsze temat do bani. Problem nie leży w Visual Studio tylko w twoim programowaniu/programie. Po drugie, jaką formę wywołujesz w Program.cs?

0

Temat nie do bani .
Problem oczywiście ze leży w moim programowaniu i mojej nie wiedzy , programuje 2 tygodnie .
Podałem VS 2017 aby było wiadomo jaka wersje posiadam środowiska.
Wywołuje forme2 ale ona nie jest główna , zarazem zawiera kontrolki logowania.
Cel programu to operacje na mysql (przenoszę bazę serwisową z strony http na aplikacje w celu ułatwienia pracy firmy w której pracuje).

0

Stąd wiem że jesteś początkujący. Z doświadczenia wiem że twój przypadek jest bardzo popularny i wersja środowiska nie ma znaczenia.
Forma która otwierasz w Program.cs, jest dla aplikacji "główną" formą. Jeśli otwierasz Form2, która jest twoim oknem logowania i tę formę zamkniesz to cała aplikacja się wyłączy. Niestety tak działa WinForms.
Zamień formy w Program.cs, a okno logowania wywołaj w twojej formie głównej, w konstruktorze.

0

Dzięki kolego,Nic się nie stało ja nawet nie mam pretensji ,nikt nie ma złotej kuli.
Ok czytałem o konstruktorach ale muszę sobie to odświeżyć jeśli mym nie dal rady podał byś przykładowe zastosowanie?
I jeszcze jedno pytanie czy to pozwoli zablokować dostęp do okna głównego do momentu wpisania hasła i ustalenia sesii jako true?

1

W Program.cs ustawiasz swoje główne okno

    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }

Form1.cs

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            Form2 frm = new Form2();

            if (frm.ShowDialog() != DialogResult.OK)
            {
                Environment.Exit(0);  
            }
        }
    }

Logowanie Form2.cs. Akcja przycisku "Zaloguj"

        private void btnLogin_Click(object sender, EventArgs e)
        {
            if(dane_do_logowania_poprawne)
            {
                DialogResult = DialogResult.OK;
            }
            else
            {
                MessageBox.Show("Niepoprawne dane do logowania");
            }
        }

Okno główne nie będzie widoczne póki nie zwrócisz DialogResult.Ok. Jeśli zamkniesz okno logowania do cała aplikacja się zamknie.

0

Dzięki oto mi własnie się rozchodziło, a czy możesz mi to przełożyć na chłopski rozum co tu się dzieje chciałbym to zrozumieć?

1

Jeśli zaczynasz programowanie kompletnie, czyli nie programowałeś w niczym wcześniej, to musisz najpierw zaznajomić się z podstawami klas i obiektów. Konstruktor formy jest wywoływany przed zrenderowaniem/wyświetleniem okna. Twoje okienko Form1 będzie czekać do momentu aż nie dostanie odpowiedzi z Form2. Odpowiedź bazuje na funkcji ShowDialog(). Zamknięcie okna logowania tak na prawdę wysyła DialogResult.Cancel. Stąd jeśli to odpowiednio "zaifujesz", okno główne może w ogóle się pokazać póki nie podasz poprawnych danych do logowania. Każde twoje okienko jest w stanie zwrócić DialogResult. Moim zdaniem jest to najprostsze rozwiązanie do komunikacji pomiędzy formami.

Inny przykład.
Masz listę towarów, chcesz dodać nowy towar. Otwierasz okienko dodawania towaru, uzupełniasz dane, klikasz "Zapisz", w którym jest DialogResult.OK, a twoje główne okienko w tym momencie wie, że faktycznie dodałeś nowy towar i może przeładować listę, aby nową pozycję wczytać. Jeśli klikniesz na "Anuluj", zwrócisz DialogResult.Cancel i listy przeładowywać nie trzeba, ponieważ nowych danych nie ma.

PS.
Nie jestem dobry w tłumaczeniu. Tym bardziej na temat rzeczy, które dla mnie są oczywiste, ponieważ mam wrażenie, że piszę jasno i czytelnie, a okazuje się, że jest jeszcze gorzej :D

0

Nie wiem czy dobrze rozumiem ale żeby przenieść dane z jednego form do drugiego
Musisz stworzyć w formie do którego chcesz przenieść dane utworzyć zmienną statyczną podobną do tej:

public static TypZmiennej NazwaZmiennej {get; set;}

*"NazwaZmiennej" *oraz "TypZmiennej" to rzeczy które sam uzupełnić (typ i nazwa zmiennej w zależności od potrzeb)
Teraz daj nazwę Form'a po kropce Nazwę Zmiennej i możesz jej przypisać wartość; Kod:

NazwaForma.NazwaZmiennej = WartośćZmiennej;

Odczytanie Wartości Zmiennej

string PrzykladowaZmienna;
PrzykladowaZmienna = NazwaForma.NazwaZmiennej;

Pokazałem ci jak Zmieniać i Odczytywać Zmienne
Myślę że pomogłem

Pozdrawiam @Mondonno

:)

0

Mondonno-Dziek za odp to akurat udało się mi zrozumieć podczas tworzenia sesji.
AdamWox-Wszystko jasne dzięki (co do tłumaczenia bardzo zrozumiale).Co do programowanie obiektowo nie programowałem (co tam zacząłem w c+ ale zaniechałem) ,przez 15 lat pisałem softy na AVR (10lat w bascomie a resztę juz w C).Ogólnie znam w podstawie Pytona i kilka innych(potrzebnych do budowy www ale to na własne potrzeby) lecz to inna bajka jest. Dzięki za pomoc dzięki wam zrobiłem duży skok (miedzy innymi update i insert Mysql ).

1 użytkowników online, w tym zalogowanych: 0, gości: 1