Visual Studio 2017 Problem z ukryciem okna logowanie

Odpowiedz Nowy wątek
2019-08-23 22:43
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

Pozostało 580 znaków

2019-08-23 22:47
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?

Pozostało 580 znaków

2019-08-23 23:39
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).

edytowany 3x, ostatnio: adix20_20, 2019-08-23 23:44

Pozostało 580 znaków

2019-08-24 03:43
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.

Pozostało 580 znaków

2019-08-24 10:25
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?

edytowany 1x, ostatnio: adix20_20, 2019-08-24 10:33

Pozostało 580 znaków

2019-08-24 10:43
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.

edytowany 1x, ostatnio: AdamWox, 2019-08-24 10:44

Pozostało 580 znaków

2019-08-24 12:19
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ć?

Pozostało 580 znaków

2019-08-24 12:39

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

Pozostało 580 znaków

2019-08-24 15:01
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

:)


edytowany 2x, ostatnio: Mondonno, 2019-08-24 15:02
Nie wiem o co ci chodzi, ale widzę twoje komentarze i często nie rozumiesz czego autor postów chce. Rozumiem, że chcesz pomóc, ale jeszcze miesiąc temu zalewałeś forum pytaniami początkującego i obawiam się, że w ciągu miesiąca nie opanowałeś za wiele. Autor tego posta już napisał, że rozwiązałem jego problem, nie wiem tylko po co twój komentarz do tego? - AdamWox 2019-08-24 15:07
Chciał wytłumaczenie, zrozumiałem to inaczej. Nie wiedziałem że problem został rozwiązany, w takim razie temat zakończony :) - Mondonno 2019-08-24 15:10
Po pierwsze, twoje tłumaczenie tyczy się kompletnie czego innego, ponieważ autor nie pytał o wymianę danych pomiędzy formami. Po drugie zmienna wcale nie musi być statyczna, według mnie nie powinna, ponieważ w takim przypadku Form1.NazwaZmiennej jest bezużyteczna nie mając stworzonego obiektu Form1 frm = new Form1(); frm.NazwaZmiennej; taka zmienna w Form1 niczemu nie służy. Obiekt formy tworzy się, aby pokazać okno, zmienna statyczna w tym obiekcie jest niedostępna. Podaj jakiś przykład gdzie to zastosować, aż mnie ciekawi. - AdamWox 2019-08-24 15:30

Pozostało 580 znaków

2019-08-25 18:43
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 ).

edytowany 2x, ostatnio: adix20_20, 2019-08-25 21:30
Cieszę się, poproszę o kliknięcie "ptaszka" przy mojej odpowiedzi, aby temat oznaczyć za rozwiązany ;-) - AdamWox 2019-08-25 18:58

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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