C# Kontrolki z innej formy

0

Otóż zaczynam przygodę z C# w Visual studio 2015 Express.
Mój największy problem to odnoszenie się do kontrolek z innej formy.

Problem 1.
Mam 2 formy powiedzmy Logowanie i Po_Zalogowaniu.
Na formie Logowanie mam też pola TextBox z danymi do SQL tj login, hasło itp.
Gdy na Formie Po_Zalogowaniu odniosę się do tych kontrolek ( np. TextBox Login). Ma on wartość sprzed uruchomienia programu tj. domyślną, a nie taką jaką wpisał użytkownik.

Jak to rozwiązać ?

0

A jak uruchamiasz drugą "formę"?

0

Ja bym zrobił to tak że do drugiej formy dodałbym właściwości login i hasło oraz metodę przypisującą te wartości z podanych jej parametrów. Wtedy wystarczy przy włączaniu drugiej formy wywołać też wspomnianą metodę podając jej aktualną wartość pól tekstowych. Jeśli pokazałbyś kod z obu form to mogę Ci podpowiedzieć konkretny kod.

1

Poczytaj o takim wzorcu projektowym jak Model - View - Presenter.

0

Nie odnoś się do kontrolek. Napisz sobie statyczną metodę, która uruchomi Ci logowanie i zwróci wpisane przez użytkownika dane. A potem posługuj się tymi danymi, np:

 
//forma logowanie

public static bool ShowLoginForm(out string username, out string pass)
{
  LoginForm f = new LoginForm();
  bool result = (f.ShowModal() == DialogResult.OK); //result będzie tylko jeśli użytkownik wciśnie OK
  username = f.userNameTextBox.Text;
  pass = f.passwordTextBox.Text;
  f.Dispose();
  return result;
}


//a potem w jakimś tam Main, czy gdzieś:
string username;
string pass;
if(ShowLoginForm(out username, out pass))
{
  DoAfterLogin(username, pass);
}

Tak to mniej więcej powinno wyglądać.

0

Jest dużo rozwiązań wszystko zależy od tego w jaki sposób ma się odwoływać. Np Masz okno główne oraz wyskakujące okna boczne gdzie wprowadzasz jakieś sobie dane i one mają być wprowadzone np do kontrolek okna głównego.

Masz 2 okna tego samego poziomu czyli raz w jednym cos wprowadzasz wpływa na 2, raz wprowadzasz w 2 wtedy wpływa na okno 1. Tutaj proponuje zrobić klasę ModelView która będzie operowała.

W ModelView możesz zarówno odwoływać się do wartości funkcji czy też obiektów zadeklarowanych w odpowiedni sposób. ModelView jak dla mnie najlepiej zrobić sobie na singletonie.

Dajmy prosty przykład odnoszący się do poziomowych widoków i operacji na kontrolkach.

Masz główne i posiada kontrolkę np

Okno 1
LB_JakasZmiennaDoWyswietlenia // Label

W miejscu wywoływania okna

Window myWindow = new MojedrugieOkno(LB_JakasZmiennaDoWyswietlenia) // przesyłamy w nim parametr jakiegoś obiektu
dalej to co robisz żeby wyświetlić okno

Okno 2

W kodzie okna 2

Label jakasotrzymanakontrolkaLabel

public MojedrugieOkno(Label _jakasotrzymanakontrolka)
{
InitializeComponent();
this.jakasotrzymanakontrolkaLabel = _jakasotrzymanakontrolka;
}

private void Button_Click(sender itp przycisku)
{
jakasotrzymanakontrolkaLabel.Text = "Przyjmij se co chcesz";
}

W tym momencie operujesz nie na nowym obiekcie typu label tylko na tym który przesłałeś.

Jak byś chciał używać MV to też podobnie będzie to działać.

0

a i jak ustawisz clasa obiekt = new clasa(); To zawsze wszystko wyczyścisz.

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