Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA w 2025? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 9 kwi 2025, o 06:56


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
    Autor Wiadomość
    PostNapisane: 23 lip 2016, o 17:40 
    Offline
    Użytkownik

    Dołączył(a): 08 maja 2014
    Posty: 61
    Pomógł: 1

    Witam wszystkich!

    Na starcie powiem, iż jestem bardzo szczęśliwy. Do tego stopnia szczęśliwy, że aż muszę się z Wami tym podzielić.
    Procuję teraz nad pewnym programem, kto wie ten wie. Potrzebuję w nim udostępnić możliwość stworzenia własnej formatki.
    Zmagałem się już kiedyś z tym problemem, ale to olałem bo znalazłem inne rozwiązanie tamtego problemu. Dziś jednak nie mogłem
    się bez tego obejść. Konkretnie chodzi o serializacje Windowsowych kontrolek takich jak Button, ComboBox etc..
    Bardzo długo szukałem jakiegoś rozwiązania w sieci zarówno naszej polskiej jak i zagranicznej. Nie spotkałem się jednak z żadnym konkretem
    który by opisywał: TAK MASZ ZROBIĆ I BĘDZIE DOBRZE. Zatem będę pierwszy. Być może jest ktoś, kto takie rozwiązanie znalazł, jeśli tak
    to poproszę :)

    Lecimy, na początku stworzyłem sobie baaardzo prostą klasę PropertyContainer.
    Oto jej kod:
    Składnia: [ Pobierz ] [ Ukryj ]
    język csharp
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Pozwoliła mi ona na zapis podstawowych danych o właściwości.

    Do serializacji naszych kontrolek będziemy musieli zaopatrzyć się w następujące biblioteki:
    Składnia: [ Pobierz ] [ Ukryj ]
    język csharp
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Kod serializacji. Mam nadzieję, że ładnie opisany.
    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język csharp
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Kod deserializacji:
    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język csharp
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Następną rzeczą jaką się w tym zajmę, będzie serializacja Eventów kontrolek. Nie wiem czy mam dziś siły ale spróbuję.
    Jeżeli mi się powiedzie, to chcecie?

    Pozdrawiam serdecznie wszystkich użytkowników! Maciek :)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 23 lip 2016, o 20:50 
    Offline
    Użytkownik

    Dołączył(a): 04 paź 2011
    Posty: 8615
    Pomógł: 338

    Tak Serializacja nie tylko w C# odgrywa często kluczową rolę w wielu funkcjach i usługach.
    Oczywiście często niestety i ja jako developer muszę wykonywać niestandardową serializacje tylko po to by mieć pełną kontrolę nad procesami zarówno samej seroializacji jak i deserializacji.
    I tu używanie standardowych procesów serializacji z .Net jest niewystarczające .

    Zauważ że funkcja serializacji w .Net jest stosunkowo nowa , wcześniej jedyna metodą było
    przechowywanie obiektów klasy poprzez przepisanie ich do strumienia , ale to rowiązanie choć proste ma 2 wady lub jak wolisz konsekwencje:

    1. Trzeba napisać kod dla każdego obiektu , jeśli masz ich więcej zdefiniowanych jako typ zawierający kilka obiektów i robi się to wszystko zagmatwane ....
    2. jesli chcesz wprowadzić zmiany do obiektów klasy to musisz tez zmienic kod przechowywania :)

    ale wszystko znajdziesz w msdn :)

    Pamiętaj o użyciu IDSerializationCallback bu przeliczyć obiekty zawłaszcza gdy zostaną rozszeregowane :) Oraz o odpowiednim doborze formatera obiektów BinaryFormatter i SoapFormatter :)

    _________________
    Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 23 lip 2016, o 20:57 
    Offline
    Użytkownik

    Dołączył(a): 08 maja 2014
    Posty: 61
    Pomógł: 1

    Jak zatem dodać do klasy Button atrybut [Serializble]? ;)
    Nie ma możliwości edycji klasy sealed takiej jak przykładowo Button.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 23 lip 2016, o 21:14 
    Offline
    Użytkownik

    Dołączył(a): 04 paź 2011
    Posty: 8615
    Pomógł: 338

    otóż to ,...
    Dlatego wygodniej jest użyć metody niestandardowej serializacji realizowanej poprzez interfejs ISerializable. W tym interfejsie znajdziesz konstuktora metody GetObjectData()

    ....

    :)

    _________________
    Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 23 lip 2016, o 21:23 
    Offline
    Użytkownik

    Dołączył(a): 08 maja 2014
    Posty: 61
    Pomógł: 1

    Nie korzystałem z tego interfejsu. Aczkolwiek wydaje mi się, że tą metodą którą przedstawiłem dało by się zserializować dosłownie wszystko dzięki bibliotece Reflection.
    Do stworzenia obiektu danej klasy nie powinno mi być potrzebne nic oprócz jego właściwości. Metoda GetProperties() daje mi wszystko czego potrzebuję, w każdym przypadku.
    Nie wiem jak z obiektami klas które nie mają publicznego konstruktora. Nie próbowałem za pomocą Activator.CreateInstance() tworzyć takiego obiektu. Ciekaw jestem co by z tego wyszło :D
    Na przykład PropertyInfo. Nie da się napisać PropertyInfo pInfo = new PropertyInfo(). Nawet podczas tworzenia obiektu z publicznym konstruktorem, który
    wymaga podania jakichś parametrów należy je podać za pomocą tablicy object[]. Jeżeli tego się nie zrobi to dostaniemy wyjątek "Nie odnaleziono konstruktora.. blablabla".



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 23 lip 2016, o 21:29 
    Offline
    Użytkownik

    Dołączył(a): 04 paź 2011
    Posty: 8615
    Pomógł: 338

    owszem standardowy mechanizm którego uzywasz jest ok , ale nie daje pełnej kontroli
    i to może stanowić problem :)

    _________________
    Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 23 lip 2016, o 21:54 
    Offline
    Użytkownik

    Dołączył(a): 08 maja 2014
    Posty: 61
    Pomógł: 1

    Czym jest pełna kontrola?
    Chodzi o to, że kiedy na formatce np będzie Panel, który ma inne panele, które mają inne panele które mają GroupBoxy które mają inne kontrolki to to nie zadziała przy deserialziacji?
    Nie wziąłem tego pod uwagę. Musze to od nowa przemyśleć. Chyba, że chodzi Ci o coś innego? :D Podpowiedz, chętnie postaram się to rozgryźć :P



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    Wyświetl posty nie starsze niż:  Sortuj wg  
    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości


    Nie możesz rozpoczynać nowych wątków
    Nie możesz odpowiadać w wątkach
    Nie możesz edytować swoich postów
    Nie możesz usuwać swoich postów
    Nie możesz dodawać załączników

    Szukaj:
    Skocz do:  
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO