Witamy na forum PC Format Zapraszamy do REJESTRACJI


Użytkownicy przeglądający ten wątek: 1 gości

Przekazywanie danych z kilku form

#1
Przekazywanie danych z kilku form
Cześć, mam pewien problem z przekazywaniem danych do innych form. Mam form1, która odpowiada za logowanie, form2 odpala się tylko jeżeli użytkownik poprawnie się zaloguje. W Form1 i form2 mam połączone konstruktorem, z form1 przesyłam dane do form2 i jest git, mam jeszcze form3, którą otwieram w form2. Chciałbym zapytać jak mogę przesłać dane z form3 do form2 (form4 do form2, form5 do form2, form6 do form2...). W form2 otwieram okno form3, która zawiera jakieś kontrolki np. combobox, ustawiam te comboboxy tak jak chce, wciskam button "aktualizuj" i przesyłam danę z tych comboboxów (form3,4,5,6...) do form2. Nie mam pojęcia jak mogę to zrobić bo przy próbie wstawienia dwóch konstruktorów mam błędy. Macie jakieś rozwiązanie, możecie pokazać jak to wygląda? Borykam się z tym problemem parę dni i nie mogę dojść. Z góry dziękuje bardzo.

Taki kod daje do form1
Kod:
public string nick
        {
            get { return nick1; }
        }

        public string hdid1
        {
            get { return hdid; }
        }

w form2

Kod:
private Form1 f1;

        public Form2(Form1 f1)
        {
            this.f1 = f1;
            InitializeComponent();
        }

Ale jak to zrobić razem z innymi formami nie mam pojęcia.
 System operacyjny: windows_seven Przeglądarka: firefox
#2
RE: Przekazywanie danych z kilku form
Nie napisałeś, o jaki język chodzi, ale domyślam się, ze o któryś z języków .NET. Nie jest to proste do wyjaśnienia w krótkim tekście, więc napiszę tylko tak:

Poczytaj o delegatach (delegates). To jest sposób na rozwiązanie tego problemu. Delegaty to jest coś w rodzaju wskaźników na funkcje. Można przy ich pomocy wywoływać funkcje jednego obiektu w innym. Na przykład zdarzenia (events) to jest rodzaj delegata.
Pozdrawiam.
Ajgor
 System operacyjny: windows_seven Przeglądarka: firefox
#3
RE: Przekazywanie danych z kilku form
Bardzo przepraszam, język C#.

Mógłbyś mi podać jakiś przykład jak można to wykonać? Pisałem już na wielu forach i na każdym odsyłali mnie gdzie po czym i tak nie mogłem dojść o co tu chodzi. Byłbym bardzo wdzięczny.
 System operacyjny: windows_seven Przeglądarka: firefox
#4
RE: Przekazywanie danych z kilku form
Nie podam Ci teraz, bo nawet nie mam Visuala zainstalowanego, a to jest na prawdę BARDZO szeroki temat i nie da się w krótkim przykładzie pokazać. Ale na prawdę jest masa przykładów w sieci. Po polsku również.
Pozdrawiam.
Ajgor
 System operacyjny: windows_seven Przeglądarka: firefox
#5
RE: Przekazywanie danych z kilku form
Przy pomocy użytkownika Ajgor doszedłem do tego jak przesłać dane z form1 do form2 gdzie form1 otwiera okno form2. Przekształciłem trochę kod aby z dane były przekazywane z form2 do form1. Bardzo proszę o zerknięcie.

http://www.pastebin.pl/view/832fbeda

Dodam, że jeżeli zrobiłbym to odwrotnie czyli form1 przekazuje dane do form2 to działa to poprawnie ale jak chcę zrobić na odwrót to jak widać nie mogę tej zmiennej przekazanej wykorzystać w formie głównej. Moim zadaniem jest zrobienie około 8 form, z których będę przesyłał dane do formy głównej. Aby zaoszczędzić miejsca i nie wypisywać wszystkich funkcji w głównym oknie chcę wykorzystać do każdej funkcji programu formę z ustawieniami danej funkcji, która przesyła te ustawienia do okna głównego.

Z góry bardzo dziękuje za pomoc i pozdrawiam!
 System operacyjny: windows_seven Przeglądarka: firefox
#6
RE: Przekazywanie danych z kilku form
Ależ jesteś niecierpliwy. Jeden dzień Ci nie odpowiedziałem, bo nie miałem czasu Wesoły
No dobra. Pokaże Ci najprostszy możliwy sposób na osiągnięcie tego, co chcesz. Nawiasem mówiąc wymyślony przeze mnie Wesoły Bez użycia delegatów. Bez użycia w ogóle jakichkolwiek konstrukcji Wesoły Kod krótki, szybki, ale wymagający pełnej kontroli nad projektem (jak źle pomyślisz, to program będzie się wysypywał).
Podaj maila, to Ci wyślę całą solucję. Odpalisz i od razu zadziała.
Ale najpierw małe wyjaśnienie:
Żeby móc wywołać cokolwiek w innym obiekcie, musisz mieć do niego tzw. uchwyt. Czyli jego adres w pamięci. Tworząc obiekt na przykład w ten sposób:

Kod:
Form2 forma2 = new Form2();

otrzymujesz automatycznie uchwyt do formy2 w zmiennej "forma2". Z ojca możesz więc wywoływać dowolne funkcje w dziecku. A także przekazywać mu zmienne. Problem jest, kiedy chcesz to zrobić w drugą stronę, bo dziecko nie zna uchwytu ojca ( Szczerbol)). Dlatego trzeba go jakoś zdobyć. Jest na to kilka sposobów. Konstrukcja, którą Ci opisałem wcześniej:

Kod:
Form1 ojciec = (Form1)this.ParentForm;  //Uzyskanie dostępu do parenta

jest jednym z nich. Nie koniecznie najlepszym. Lepszym sposobem jest przekazanie go w konstruktorze. Czyli przykładowo w Form2 piszemy:

Kod:
Form1 ojciec;    // Form1 MUSIMY zadeklarować poza wszystkimi funkcjami, żeby mieć dostęp do niej w całym obiekcie.

        public Form2(Form1 tata)     // W konstruktorze odczytujemy uchwyt do Form1...
        {
            InitializeComponent();
            ojciec = tata;                      //... i wpisujemy do zmiennej "ojciec"
        }

A następnie tworząc obiekt w Firm1 piszemy:

Kod:
Form2 forma2;  

forma2 = new Form2(this);    //Tu tworzymy obiekt forma2 i do "forma2" przypisujemy uchwyt do niego
forma2.Show();     //Słowo kluczowe "this" przekazuje do konstruktora form2 uchwyt do Form1

Przekazując między obiektami uchwyty do nich, możesz zrobić wszystko. Oczywiście o tym, że funkcje muszą być publiczne, nie muszę chyba mówić.
Kiedy program będzie się wysypywał? Jak otworzysz kilka okien, przekażesz uchwyty gdzie trzeba, a później któreś okno zamkniesz i otworzysz ponownie i nie przekażesz nowego uchwytu. Wtedy zostanie wywołana funkcja w już nie istniejącym starym obiekcie.
Można tego uniknąć w prosty sposób. Utworzyć osobną klasę, przechowującą uchwyty do wszystkich obiektów, i każdorazowo wywołując jakąś funkcję w jakimś obiekcie, odczytywać jego uchwyt z tej klasy, a tworząc nowy obiekt, od razu zapisywać nowy uchwyt do tej klasy. Skomplikowane? Wcale nie Wesoły Wystarczy pomyśleć.
Pozdrawiam.
Ajgor
 System operacyjny: windows_seven Przeglądarka: firefox
Programy: Polecane / Nowe / Inne




Podobne wątki (Przekazywanie danych z kilku form)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  Przekazywanie wskaźnika przez referencję w Qt Trojan3000 3 23528 10.12.2019, 13:16
Ostatni post: Ajgor
Ściana batch file ustawianie jednej wartosci zmiennej do kilku plikow kulis88 6 2698 03.08.2017, 19:12
Ostatni post: kulis88
Shy [c++] Odszukanie kilku najmniejszywch wartosci w tablicy wsadx 1 9975 01.04.2016, 12:05
Ostatni post: aht

Skocz do: