Przejscie z consoli do win form = problem z dostaniem sie do kontrolek

0

Witam,
Otóż mam dosyć rozbudowaną aplikacje konsolową (3 klasy)

i nie moge już na to patrzeć więc postanowiłem przenieść ją na win form.

W sumie chciałem tylko żeby to co wypisuje się na konsoli + wartości zmiennych w danym czasie pokazywały się w kontrolkach formularza (głównie textbox).

Problem w tym że to 3 klasy które posiadają prawie same statyczne funkcje więc jest podwójny kłopot tj. dostanie sie ze statycznej funkcji i dostanie się z poza MainForm.

Dodam jeszcze że są dodatkowe wątki odczytujące COMa i pobierające/wysyłające dane w sieć (multicast/unicast via IPv6)....

**Jak ugryźć temat ? **Ma ktoś jakąś podpowiedz/sugestie ?

(w konsoli działa idealnie)

dziekuje z góry

0
siszarp napisał(a):

Otóż mam dosyć rozbudowaną aplikacje konsolową (3 klasy)

3 klasy to raczej niezbyt rozbudowana aplikacja.

Problem w tym że to 3 klasy które posiadają prawie same statyczne funkcje więc jest podwójny kłopot tj. dostanie sie ze statycznej funkcji i dostanie się z poza MainForm.

Dodam jeszcze że są dodatkowe wątki odczytujące COMa i pobierające/wysyłające dane w sieć (multicast/unicast via IPv6)....

Oddziel klasy realizujące właściwe zadania aplikacji, czyli tą obsługę COM i sieci, od klas obsługujących interfejs użytkownika oraz wyświetlanie danych, to będzie Ci łatwiej przenieść aplikację do WinForms.

0

Witam,
dziekuje za odp.

Natomiast gdy np czekam na od serwera DHCP i moduł sieciowy ją pozyska to jak dane z tej odpowiedzi umiescic w polach MaiNform?

Jeszcze tylko dla pewności zapytam - z metody statycznej nie dostane sie do textboxa ?

pzdr

0

Metodę statyczną wywołujesz bez tworzenia obiektu klasy, można to potraktować jako "odpowiednik" funkcji globalnej.
Zgaduję, że masz prawie wszystkie metody statyczne tylko dlatego że w aplikacji było static void Main() jeśli tak to raczej kiepsko ta twoja aplikacja jest zaprojektowana i powinieneś jeszcze raz ją przemyśleć.

Metody statyczne stosuje się tylko w uzasadnionych przypadkach i wątpię że taki przypadek zachodzi u ciebie. Jeśli jakaś klasa ma prawie wszystkie metody statyczne i jeszcze w dodatku chcesz z ich poziomu zmieniać coś w gui to od razu widać że jest tu coś nie tak.

0

Nie jestem jak widać wysokich ani nawet średnich lotów programistą.

Na tyle czaje C# że z gotowych przykładów potrafie coś w całość poskładać ....

public static void Main()
faktycznie występuje ale 3/4 kody jest poskładane z exampli microsoftu.

Widze że faktycznie bede musiał to przebudować.

Tak czy inaczej jak z innej klasy dorwać się do instancji mainform , żeby do texboxów sie wdostać ?

Przykłady w necie sugerują stworzenie obiektu tej klasy ale przeciez uruchomienie aplikacji zaczyna się od wyświetlenie winform więc instancja jak rozumiem sie stworzyła ... po co więc kolejną tworzyć ....

dzieki z góry

0

Przy najprostszej architekturze, to MainForm powinien sobie pobierać dane z klasy obsługującej sieć, a nie ona coś w nim ustawiać.
Przy bardziej poważnej architekturze, powinna być klasa pośrednicząca, pobierająca dane z tej, która obsługuje sieć i ustawiająca w MainForm.

0

Dodatkowo nie zapomnij o wątkach jesli masz jakies operacje, które dłużej trwają. W innym przypadku, na czas wykonywania blokującej metody program sie zawiesi. Operacje sieciowe w szczególności mogą to spowodować, muszą być realizowane w osobnym wątku.

Nie potrzebujesz zmieniać kontrolek głównego okna z poziomu innej klasy, zamiast tego wywołaj z poziomu głównego okna metodę innej klasy, metoda ta zwróci wynik i ten wynik ustawisz np. jak tekst w textoxach. Jeśli chcesz żeby coś sie ustawiło automatycznie, wykorzystaj standardowe zdarzenia formularza (np OnLoad - wykonywane od razu po utworzeniu okna).

0

Witam,
Dziękuję za pomoc, już sobie poradziłem.

Troche poprzerzucałem i do wątków użyłem INVOKE i działa dokładnie tak jak chciałem :)

pozdrawiam

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