WinForms logowanie

0

Witam. Jak zrobić następującą rzecz. Mam główny Form , który po uruchomieniu pokazuje Form2 jako modalny. Form2 To jest okno logowania. Czyli wprowadzam nazwe usera haslo i po sprawdzeniu jeśli jest ok to zamykam okno logowania. I teraz jak zrobić aby to co wprowadzę w Form2 czyli user i password miał dostępne z poziomu Form1.? Mam klasę User, która ma pola np name, id (Te pola chce zaaktualizować jeśli będzie poprawne logowanie), . Czy dobrze będzie jak ustawie pola klasy User i ewentualne metody jako statyczne ? Bo nie muszę wtedy tworzyć obiektu typu user i z każdego miejsca mogę te pola odczytać lub zmodyfikować . Czy jest jakieś inne eleganckie rozwiązanie. Nie chodzi mi o kod tylko taki ogólny opis.

0

A czemu forma logowania nie może otwierać formy głównej po udanym logowaniu i przekazywać jej w konstruktorze użytkownika?

0

Bo chciałbym żeby program główny był uruchomiony a na nim okno logowania. i nie wpuści mnie póki nie podam danych logowania

0

Mylisz chyba pojęcia "program" i "okno główne". Poza tym przecież to podstawy. Otwierasz okno modalne, tak? I nie wiesz, jak zwrócić z niego parametry? Przecież to Ty wiesz, kiedy okno zniszczyć. Okno to klasa. Możesz ją wyposażyć w dodatkowe metody w stylu: GetLogin i GetPass. To nawet mogą być własności. Dopiero po pobraniu tych danych niszcz okno. Dane masz pobrać między zamknięciem okna, a zniszczeniem go, np:

Form2 f = new Form2();
f.ShowModal();

string user = f.GetUser();
string pass = f.GetPass();

f.Dispose();

Oczywiście to najprostszy przykład nie do użycia w kodzie biznesowym.
Jeszcze lepiej zrobisz, jak napiszesz sobie statyczną metodę, otwierającą to okno (w klasie tego właśnie okna) i zwracającą Ci, co podał user za pomocą argumentów ref, czy out.

0

@Juhas: Pewnie się pomyliłeś bo nie ma czegoś takiego jak ShowModal();. Użyłbym jak już ShowDialog() oraz DialogResult. Druga sprawa to nie podoba mi się udostępnianie wrażliwych informacji poprzez publiczne metody/propertisy.

Ja bym zrobił to tak, że forma logowania po udanym logowaniu otwiera formę główną i przekazuje jej dane jakich potrzebuje przez konstruktor.

0

Jak mówiłem już wcześniej takie rozwiązanie odpada. Główny Form ma być widoczny a Forma logowania ma decydować o tym czy się do niego dostać czy nie. Generalnie potrafię sobie wygooglować jak przekazać dane z formy logowania do formy głównej. Ale interesuje mnie takie rozwiązanie profesjonalne :)

0

To tak, jak napisałem ze statyczną metodą w formie klasy logowania. I wtedy nie musisz zwracać loginu ani hasła do formy głównej, tylko info, czy udało się zalogować, czy nie.

0

Ale napisał że potrzebuje Usera w formie głownej.

0

No, skoro potrzebuje info o zalogowanym Userze, to ma kilka możliwości. Może m.in. zwrócić go przez parametr out.

Ech, dobra podam kod, bo widzę, że nie da rady bez tego (wszystko pisane z palca):

//klasa okna do logowania

public class LoginForm: Form
{
  public static bool LoginUser(out User user)
  {
    LoginForm f = new LoginForm();
    DialogResult res = f.ShowDialog();
    if(res == DialogResult.OK) //w sensie, że user wcisnął OK
    {
      //tu masz kilka możliwości
      //możesz stworzyć usera za pomocą konkretnego konstruktora
      //user = new User(/* jakieś parametry *);

      //możesz pobrać całego usera z bazy np. w taki sposób
      //user = DbManager.GetUserByName();

      //możesz też pobrać go gdzieś podczas logowania - po wciśnięciu klawisza OK i przechować w jakimś prywatnym polu i wtedy
      //user = f.mUser;

      //możesz też chcieć tylko jego nazwę, którą pobierzesz z TextBoxa:
      //user.Name = f.nameText.Text;
    } else
      user = null;

    //na koniec niszczysz formę
    f.Dispose();
    
    //i zwracasz rezultat
    return res == DialogResult.OK;
  }
}

//wywołanie z formy głównej jest oczywiste:
User user;
if(LoginForm.LoginUser(out user))
{
  //użytkownik zalogowany
} else
{
  //użytkownik niezalogowany
}
0

Aż tak źle to nie jest żebym nie dał rady napisać. Chciałem tylko takie rozwiązanie opisowe ale dzięki za kod. Mam jakiś pogląd na to.

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