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



Teraz jest 26 lis 2024, o 11:23


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 82 ]  Przejdź na stronę 1, 2, 3  Następna strona
Autor Wiadomość
PostNapisane: 1 lip 2012, o 15:59 
Offline
Użytkownik

Dołączył(a): 15 lut 2012
Posty: 344
Lokalizacja: Bydgoszcz
Pomógł: 11

Witam!

Ostatnimi czasy zacząłem interesować się MS Visual Studio C#. Język programowania jest bardzo przyjazny ;) . Tutaj znajduję się bardzo przyjemny kurs tego języka http://si-szarp.pl/ a tutaj na forum ja skupie się na pokazaniu tego środowiska i tego jak można się poruszać(przynajmniej się będę starać :) ). Głownie będę się skupiać na aplikacjach Winzgrozowych jak mawia mistrz SunRiver :) .

Na początek należy ściągnąć samo środowisko z tego linku: http://www.microsoft.com/visualstudio/e ... rp-express
i jeśli nie mamy .NET Framework to ściągamy go z tego linku: http://www.microsoft.com/downloads/en/d ... laylang=en

Po poprawnym zainstalowaniu środowiska i jego uruchomieniu powinien pojawić się ten o to ekran:

Obrazek



Wybieramy New Project i pokaże się nam kolejne okno:


Obrazek

W tym oknie wybieramy WindowsFormsAplications(ponieważ będziemy się skupiać na aplikacjach okienkowych) i określamy nazwę dla projektu.

Po zakończeniu powyższych czynności pojawi nam się projekt formularza aplikacji(przy okazji zostanie wygenerowanych sporo plików...).

Obrazek

W tym miejscu chciałbym powiedzieć że świeżutko po instalacji interfejs będzie inaczej wyglądał(ponieważ ja sobie go dostosowałem do własnych potrzeb a raczej przyzwyczajenia z C++ Builder).

Teraz przystąpimy do napisania jakiejś ultra-prostej aplikacji okienkowej która wyświetli nam jakiś przykładowy komunikat.

1. Na dobry początek aby nie dostać rozdwojenia jaźni 8-) zwiniemy sobie na palecie kontrolek(komponentów dla Borlandowców :mrgreen: ) AllWindowsForm, ponieważ może nam to przeszkodzić. Lepiej gdy kontrolki są poukładane kategoriami.

2. Wybierzemy sobie z naszej palety kontrolkę button a następnie "rysujemy ją na polu formularza" i oprogramujemy zdarzenie Click

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


Aby zobaczyć efekt naszego arcydzieła sztuki programistycznej :D należy nacisnąć przycisk który przypomina przycisk play na odtwarzaczach muzyki lub wywołać ze skrótu klawiszowego

Po uruchomieniu pojawi nam się okno pierwszej aplikacji i po kliknięciu przycisku pojawi nam się najprostszy komunikat. W czasie pisania programu pojawi nam się lista rozwijana z dostępnymi metodami akcjami i właściwościami jednym słowem mydło i powidło dla programisty 8-) . Ta lista to mechanizm InteliSens bardzo pomocna i może pojawić się sama lub możemy wywołać ją ze znanego skrótu z Eclipse lub środowisk Borlanda a mianowicie CTRL+SPACJA.

Skoro napisaliśmy pierwszą aplikację okienkową która wyświetla nam komunikat po kliknięciu w przycisk to zajmiemy się teraz aplikacją która wyświetli nam zawartość pola tekstowego.

Jeżeli mamy jeszcze pracujemy na tym samym projekcie to z palety kontrolek wybieramy kontrolkę textbox i "rysujemy" ją na polu formularza, a następnie przechodzimy do oprogramowania zdarzenia Click dla kontrolki button.

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


Żeby użytkownik naszego jakże skomplikowanego programu :D wiedział do czego służy to dobrze by było zmienić tekst na tej kontrolce, więc przechodzimy do listy właściwości i szukamy parametry text i zmieniamy ten parametr na jakąś dowolną wartość.

Ta jakże zaawansowana aplikacja powinna mieć mniej więcej taką postać i tak działać.

Obrazek


Jeśli chodzi o temat komunikatów jest troszkę bardziej złożony bo taki komunikat można odpowiednio sformatować tj. określić etykietę komunikatu, ikonę(ikona informacyjna,błędu i ostrzeżenia jak i dodać jakieś dodatkowo przyciski do naszego komunikatu) innymi słowy czego dusza zapragnie.


ZMIENNE I ICH WYŚWIETLANIE

Tutaj szczególną uwagę zwrócę na wyświetlanie liczb i ich konwersję. Jeśli ktoś używał kiedyś środowisko Borlanda to zapewne wie że było tam coś takiego jak IntToStr i StrToInt - odnosiło się to w pierwszym przypadku do konwersji zmiennej typu int na typ łańcuchowy który był zjadliwy chociażby dla komponentu TEdit. W Visual C# jest coś takiego jak ToString, który umożliwia nam konwersje na typ łańcuchowy string na przykład takich zmiennych jak int i double. Jest jeszcze funkcja a raczej klasa Convert, on konwertuje typ łańcuchowy na jakiś typ zmiennej na przykład int,double itp. Aby pokazać jak działają te klasy do konwersji między typami zmiennych napiszemy kolejny ultra-prosty program który dodaje 2 liczby. Na początek na projekcie formularza naszej aplikacji narysujemy sobie 3 kontrolki textbox i 1 kontrolkę button. Teraz przystępujemy do oprogramowania zdarzenia Click kontrolki button:

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




Ok na dzisiaj koniec tego mojego przynudzania :) . W następnej części opiszę tworzenie własnego menu i przyjrzymy się naszej formatce a raczej jej różne odsłony.

Pozostaje mi tylko mieć nadzieje że spodobają mi się te moje wypociny :) .




Pozdrawiam!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lip 2012, o 16:25 
Offline
Użytkownik
Avatar użytkownika

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

No proszę proszę, a ja jak zwykle muszę poprzenosić :)
hehehe.... ale jak to miło jak forum nam rośnie i to dosyć uniwersalnie bo wszystko to da się wykorzystać
do działania z naszymi AVR-kami :)

I jeszcze jedno .... takie małe ale ... nie żebym się czepiał :)
ale proszę bez mistrzowania mi tu .... po prostu SunRiver, Sun, wariat .... ale nie mistrz ... :)

_________________
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: 1 lip 2012, o 16:31 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27313
Lokalizacja: Szczecin
Pomógł: 1041

SunRiver napisał(a):
ale proszę bez mistrzowania mi tu ....


aj tam aj tam ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lip 2012, o 17:07 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2011
Posty: 265
Lokalizacja: Szczecin
Pomógł: 9

Fajny i potrzebny Tutorial, mam nadzieję, że będą kolejne, akurat jestem w trakcie nauki C# :)

Odnośnie C# w necie niedawno znalazłem jak napisać w Terminal do obsługi RS232. Program przetestowałem i działa świetnie. Na razie nie znalazłem w nim żadnego błędu.
Link:
http://msmvps.com/blogs/coad/archive/20 ... -.NET.aspx

Terminal przypomina znany program Terminal 1.9b.

C# udostępnia mnóstwo ciekawych bibliotek do oprogramowania RS232, dzięki czemu w bardzo łatwy sposób można skomunikować PC z uP.

Najprostsza konfiguracja RS232 oraz wysyłąnia stringów na RS232 sprowadza się do napisania kilku linijek kodu:
Kod:
private static void SendSampleData()
{
  // Instantiate the communications
  // port with some basic settings
  SerialPort port = new SerialPort(
    "COM1", 9600, Parity.None, 8, StopBits.One); 
  // Open the port for communications
  port.Open();
  // Write a string
  port.Write("Hello World");
  // Write a set of bytes
  port.Write(new byte[] {0x0A, 0xE2, 0xFF}, 0, 3);
  // Close the port
  port.Close();
}

Może ktoś wie jak jest ze sprzedażą komercyjną programów napisanych w C#?
Już nie spamuje i czekam niecierpliwie na dalsze lekcje:)

_________________
www.iuvo.it - Automatyka Budynkowa



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lip 2012, o 17:14 
Offline
Użytkownik

Dołączył(a): 15 lut 2012
Posty: 344
Lokalizacja: Bydgoszcz
Pomógł: 11

Jeśli chcesz sprzedawać aplikację napisane w C# to niestety nie przez wersje express bo możesz wierzyć lub nie ale może się to skończyć sprawą w sądzie i karą finansową. Jedynie zakup wersji Ultimate lub Professional zezwala na komercyjne korzystanie a express to jedynie do nauki i ewentualnie dobrowolnych dotacji ze strony zadowolonych użytkowników.

Pozdrawiam!

Odnośnie RS232 będzie opisane nadawanie oraz odbieranie danych ;) i prezentowanie na wykresie...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lip 2012, o 17:18 
Offline
Użytkownik
Avatar użytkownika

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

Ciekawe co prawisz bo jak do tej pory Microsoft nie narzucał żadnych warunków na sprzedaż programów. Można sprzedawać dowolną ilość dowolnej liczbie klientów programy pisane w dowolnej edycji Visual Studio, wliczając w to darmowe wersje Express.

_________________
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: 1 lip 2012, o 17:28 
Offline
Użytkownik

Dołączył(a): 15 lut 2012
Posty: 344
Lokalizacja: Bydgoszcz
Pomógł: 11

Hmm faktycznie Sun masz racje zapędziłem się. Moje przyzwyczajenie z innych darmowych wersji programów które na to nie pozwalały, jeszcze raz bije się w pierś... :oops:



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lip 2012, o 17:39 
Offline
Użytkownik
Avatar użytkownika

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

No właśnie ... tak mi się jakoś wydawało :)

_________________
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: 1 lip 2012, o 18:52 

Pomógł: 0

Mnie nurtuje tylko jedno, a w zasadzie seria pytań, jak z wydajnością kodu w C#, bo rozumiem, że przenośność żadna ;), oraz czy za każdym razem trzeba instalować tego przerośniętego wieprza .NET ;). Da się pisać jakoś proste programy w C#, które nie wymagają instalowania setek megabajtów bibliotek.

Sam bym czasem skrobnął jakiś sofcik do komunikacji po rs czy USB, ale przeraża mnie zwalistość tworów microsoftu.



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lip 2012, o 18:56 
Offline
Użytkownik
Avatar użytkownika

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

czemu zwalistość , aż tak źle nie jest , po za tym to nie AVR możesz zaszaleć

:)

popatrz SunMAG zajmuje 560KB tylko
a jest w C Sharp właśnie

_________________
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: 1 lip 2012, o 19:02 

Pomógł: 0

Chodzi mi o działanie na słabszym sprzęcie, czy ma to szanse działać na urządzeniach mobilnych typu CE, procesorach VIA epia itp. .NET zawsze kojarzył mi się z ogromem potrzebnych bibliotek, które muszą być zainstalowane by wyświetlić "hello world" :).



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lip 2012, o 19:33 
Offline
Użytkownik
Avatar użytkownika

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

no ,NET trzeba zainstalować jeśli idzie o x86 i x64
natomiast co do CE to jeszcze sie nie bawiłem WM develop

_________________
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: 1 lip 2012, o 22:39 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 maja 2012
Posty: 471
Lokalizacja: ZGY/ZS
Pomógł: 30

Na Win CE też jest Compact framework do instalacji. Aplikacje właściwie to lecisz jak na PC. Testowałem z jakąś nawigacją i zaskoczyło mnie to, że mając ją podpiętą do kompa pisząc program i wciskając F5 wszystko przesyła się i odpala w win CE i jest pełne debugowanie. A co do ociężałości, to Frameworka trzeba zainstalować, ale "to co wyżej" to do wyboru. Express edition nie jest wielki, jest alternatywa dużo lżejsza SharpDevelop. Kiedyś używałem, ale VS lepiej mi leży, "autopodpowiadanie" jest dużo sprawniejsze.

A co do komunikacji SerialPort to będę miał pytanie jak wy realizujecie odbiór, ja próbowałem różnych dróg. Ale to jutro bo już padam:) Ogólnie to fajnie że rodzi się wątek pisania w C Płotku, zawsze będzie można uzyskać ciekawe rady;]

_________________
eDiyCraft.blogspot.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lip 2012, o 23:03 
Offline
Użytkownik

Dołączył(a): 15 lut 2012
Posty: 344
Lokalizacja: Bydgoszcz
Pomógł: 11

Jeśli chodzi o odbiór stosuje zdarzenie DataReceived i w tym zdarzeniu stosuje funkcję ReadTo do pobrania wartości do jakiejś zmiennej string.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 lip 2012, o 07:43 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 lis 2011
Posty: 582
Lokalizacja: okolice Wrocławia :)
Pomógł: 24

Sam jestem początkujący w C# ale swoją pierwszą aplikację wykorzystującą komunikację po RS232 uruchomiłem po przeczytaniu tutoriala na forum stricte związanym z robotyką.
Mam nadzieję że Mirek nie pogniewa się o linka do innego forum, ale myślę że warto zerknąć na tego tutoriala ponieważ jest dobrze opisane co i jak.

Link: http://www.forbot.pl/forum/topics20/pro ... vt6118.htm

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 lip 2012, o 19:36 
Offline
Użytkownik

Dołączył(a): 15 lut 2012
Posty: 344
Lokalizacja: Bydgoszcz
Pomógł: 11

Witajcie!

Dzisiaj będzie ciąg dalszy mojego przynudzania na temat Visual C#. W tej części zapoznamy się ze standardowym paskiem menu jaki i menu kontekstowym.

Za menu w środowisku Visual C# odpowiada kontrolka MenuStrip a za menu podręczne odpowiada kontrolka ContextMenuStrip. Obie kontrolki znajdują się w kategorii Menus & Toolbars.
Aby bliżej zapoznać się z tymi dwiema kontrolkami założymy sobie nowy projekt tak samo jak w poprzednim odcinku tutoriala.
Z palety kontrolek wybieramy MenuStrip a następnie klikamy na formie i z automatu pojawi się pasek menu u góry w formularzu.

Obrazek

Klikamy na Type Here(ogólnie to można określi czy ma być to item menu czy też jakaś lista rozwijana(combox) czy pole tekstowe) i określamy nazwę dla I kategorii menu(nazwa będzie widoczna w programie jak i w kodzie źródłowym) - ja dałem nazwę Polecenie. Po kliknięciu kategorii Polecenie pojawi się podkategoria, nazwiemy sobie ją test1. Jak już to zrobicie to zobaczycie że pojawi się kolejna i tak w kółko. My poprzestaniemy na 2 podkategoriach.

Obrazek

Ok jak już położyliśmy menu to teraz narysujemy sobie kontrolkę Label. Polecam sobie sformatować troszkę tą kontrolkę tj.zmienić czcionkę, powiększyć czy pogrubić jak kto woli... :)

Obrazek

Ok, mamy wszystko na miejscu, przystępujemy do oprogramowania zdarzenia Clic(wystarczy kliknąć dwukrotnie na daną kategorię)

Dla pierwszej podkategorii kod zdarzenia Click będzie miał taką postać:

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


Dla drugiej podkategorii kod zdarzenia Click będzie miał taką postać:

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


Ok, teraz przejdziemy do menu podręcznego. Jak już wcześniej powiedzieliśmy za menu podręczne odpowiada kontrolka ContextMenuStrip. Postępujemy sposób analogiczny do kontrolki MenuStrip.
Po położeniu kontrolki ContextMenuStrip pokaże się "szablon menu kontekstowego"

Obrazek

Teraz klikamy na Type Here(tak samo jak przy Menu Strip) i określamy jego nazwę(tutaj uwtorzymy sobie dwie kategorie i będą się bezpośrednio odnosiły do funkcji jakie im przypiszemy).

Obrazek

Przejdziemy teraz do oprogramowania zdarzenia Click dla pierwszej kategorii(również wystarczy kliknąć dwukrotnie).


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


A teraz analogiczny sposób do poprzedniego przykładu oprogramujemy zdarzenie Click dla drugiej kategorii.

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


Teraz uważajcie bo to bardzo ważne jeśli chodzi o temat menu podręcznego(kontekstowego). Kliknijcie na kontrolkę label1 i w we właściwościach odszukajcie ContextMenuStrip i w wartości wybierzcie kontrolkę kontrolkę menu podręcznego którą utworzyliście.

Obrazek

Tak wygląda nasz program po uruchomieniu:

Obrazek

Ok to by było na tyle. Wiem że przykłady są bardzo proste ale stopniowo będziemy się przesuwać dalej i trudniejsze przypadki sobie omówimy. Jutro zobaczymy formatki(rodzaje, nadawanie ikony i etykiety dla naszej formatki - już nie będzie tylko Form1 itd. :) ) i w ramach już samego programowania zaznajomimy się z tym jak napisać aplikację z kilkoma formatkami.
Pozdrawiam Michał!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 lip 2012, o 19:38 
Offline
Użytkownik
Avatar użytkownika

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

hehehe tylko ludzi nie stresuj DataGridView :)

_________________
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: 2 lip 2012, o 21:37 
Offline
Użytkownik

Dołączył(a): 11 kwi 2012
Posty: 118
Pomógł: 0

Według mnie takie poradniki powinny być w inny sposób tworzone, bo tu się robi bu...
Lepiej będzie jak osoba która chce stworzyć poradnik, od razu blokowała w nim możliwość komentowania, watek powinien być tylko do odczytu. Jak ktoś by chciał sobie o coś zapytać, to by założył oddzielny wątek ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 lip 2012, o 22:28 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 paź 2011
Posty: 307
Lokalizacja: Lbt
Pomógł: 8

Ja myślę, że narazie może zostać jak jest, a dopiero później poprzenosić posty do jakiegoś tematu i tam zrobić dyskusję.

_________________
Ujemna delta to dopiero początek zabawy...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 lip 2012, o 17:14 
Offline
Użytkownik

Dołączył(a): 15 lut 2012
Posty: 344
Lokalizacja: Bydgoszcz
Pomógł: 11

Witajcie serdecznie to znowy ja :)

Dzisiaj pobawimy się trochę z formatkami tj. zmienimy typ formatki(zaraz je przedstawimy sobie), ustawimy odpowiednią ikonę dla formatki a na końcu zrobimy aplikację z dwoma okienkami ;) .

Na samym początku zapoznamy się poszczególnymi typami okienek jakie oferuje nam środowisko Visual C# a raczej sam Windows :) .

Obrazek
rys.1

Troche się z tłem zlało :D ...


Pierwszym typem okienka jest none(rys.1) - bez belki z przyciskami do zamykania i maksymalizacji przywracania w dół i samej minimalizacji. Ten Typ okna może nam posłużyć jako chociażby splash screen bądź inne okienko umożliwiające sterowania za pomocą tylko położonych przez nas kontrolek.
Należy również pamiętać o tym że użytkownik nie może zmienić lokalizacji tego okienka i jedynie programista w fazie przygotowywania aplikacji może zadecydować w którym miejscu na ekranie będzie znajdować się te okno. Za ten parametr odpowiada odpowiednia właściwość Formatki która nazywa się "StartPosition"(figur.2) i tam ustawiamy w jaki sposób ma być pokazane okienko po starcie programu(nie tylko dla okienka none ;) ).

Obrazek
rys.2

Obrazek
rys.3

Drugim typem okienka jest Fixed Single(rys.3) w odróżnieniu od standardowego okienka nie ma możliwości rozciągania i wydłużania go. Można jednak maksymalizować, minimalizować, przywracać i zamykać.

Obrazek
rys.4

Trzecim typem okienka jest FixedDialog - jest to nic innego jak najzwyklejsze okno dialogowe z tym że nie ma ikonki. Można potraktować je jako okno do wprowadzania danych dodatkowych.

Obrazek
rys.5

Czwartym typem okinka dialogowego jest okienko Sizeable i jak sama nazwa wskazuje jest to okno które można poszerzyć lub pomniejszyć.

Obrazek
rys.6

Piątym typem okienka dialogowego jest okienko FixedToolWindow czyli taki jak by wyciągnięty pasek narzędziowy. Oprócz tego typu okna dialogowego jest jeszcze SizeableToolWindow czyli taki jak powyżej lecz posiadający możliwość rozciągania.

Dobra, omówienie typów okien mamy za sobą, teraz przejdziemy do omówienia niektórych właściwości naszej formatki. Nas najbardziej będą interesowały takie właściwości jak:
a) text
b) icon
c) size(jeżeli ktoś chce mieć kwadratową formatkę...)

Pierwsza właściwość text odpowiada za napis jaki jest wyświetlany na belce. Druga właściwość odpowiada za ikonę uwaga! tylko formatki na której pracujemy nie całej aplikacji... Ostatnia właściwość odpowiada za wymiary.
Należy również nadmienić o tym że we właściwościach formatki można ustawić to czy będzie można ją maksymalizować czy minimalizować. Można nawet w ogóle wyłącz te 3 kwadraciki. Można również określić jaki kursor będzie używany na obszarze danej formatki(właściwość Cursor).

Teorię mamy za sobą, teraz przechodzimy do praktyki czyli budujemy aplikację z dwoma okienkami.

Tak jak zawsze zakładamy nowy projekt. Rysujemy kontrolki na pierwszej formie powiedzmy tak jak na rysunku po niżej:

Obrazek


Teraz przechodzimy do dodania nowej formatki:

1) Klikamy na Add New Item pojawi się trójkącik i klikamy na trójkącik i rozwinie nam się pole jak na rysunku poniżej.

Obrazek

2) Teraz klikamy na Add New Windows Form. Pojawi się taka lista jak poniżej:

Obrazek

3) Teraz klikamy Add.

Po wykonaniu czynności powyżej pojawi się nam nowa formatka Form2. Przystąpmy teraz do narysowania kontrolek na drugiej formatce:

Obrazek
Te szare pola tekstowe oznaczają że są one tylko do odczytu a za ten parametr odpowiada właściwość ReadOnly która jest typu bool(wartości prawda lub fałsz)

Teraz przystąpimy do programowania :) . Przechodzimy na projekt pierwszej formy "Form1" i skrótem klawiszowym F7 przechodzimy do kodu źródłowego klasy Form1.
W sekcji public partial class Form1 : Form tworzymy zmienna F2 typu Form2

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

UWAGA!

Przechodzimy na projekt drugiej formatki Form2 i dla kontrolek textbox1 i textbox2 ustawiamy właściwość Modifiers na public, dzięki czemu będziemy mieli dostęp do tych obiektów z poziomu pierwszej formy.

Teraz z powrotem przechodzimy do projektu pierwszej formy i oprogramowujemy zdarzenie click dla przycisku:

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


Aplikacja powinna działać mniej więcej tak:

Obrazek

Na koniec chciałbym powiedzieć parę słów o metodzie Show otóż metoda ta działa w ten sposób że pokazuje drugi formularz ale nie blokuje tego pierwszego tak jak ma to miejsce w metodzie ShowDialog.

Dzięki temu można w oddzielnych formach pokazywać tabele lub wykresy ;) . Niestety jest jedno ale ta metoda nie zadziała jeżeli będziemy chcieli utworzyć zmienną typu Form1 w kodzie drugiej formy(tak aby druga forma odwoływała się do obiektów pierwszej formy) kompilator będzie krzyczał że został przepełniony stos i debugowanie będzie trzeba przerwać.

Ok, koniec tego megaprzynudzania. Nie piszę co będzie następne bo nie wiem jeszcze :) .

Trzymajcie się!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lip 2012, o 21:48 
Offline
Użytkownik

Dołączył(a): 15 lut 2012
Posty: 344
Lokalizacja: Bydgoszcz
Pomógł: 11

Witajcie !

W dzisiejszym odcinku poradnika porozmawiamy sobie o checkboxach, radiobuttonach, listboxach i comboboxach.

Najpierw zaczniemy od checkboxów, nie ma się co na temat tych zwierzątek dużo mówić bo jednym słowem to ptaszki które możemy zaznaczyć aby osiągnąć dany efekt. Sterowanie checkboxem odbywa się na warunku if.

Aby zobaczyć jak działa ta kontrolka narysujemy sobie jednego checkboxa i jednego texboxa. Przejdziemy teraz do oprogramowania zdarzenia CheckedChanged(wystarczy dwukrotnie kliknąć na kontrolkę) i przechodzimy do oprogramowania tego zdarzenia:

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


Prościzna no nie :) .

Teraz przejdziemy do kontrolki radiobutton. Jest to coś co przypomina checkboxa tylko zawsze działa w parze lub w większej grupie ;) (przynajmniej jeszcze nie widziałem samotnej kontrolki radiobutton).
W parze to można powiedzieć że te kontrolki działają jak przełącznik :) . W Visual C# nie ma możliwości aby te kontrolki razem były zaznaczone... Dobra przejdźmy teraz do ujarzmienia tego zwierzątka.
Na formatce narysujemy sobie 2 radiobuttony i jednego textboxa. Teraz przejdziemy do oprogramowania zdarzenia CheckedChanged(również klikając dwukrotnie na kontrolce) i w tym zdarzeniu piszemy:

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


Dla drugiej kontrolki postępujemy analogicznie i piszemy:

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


Wróćmy jeszcze do działania radiobuttonów. Gdy chcielibyśmy mieć 4 kontrolki radiobutton na jednej formatce i chcielibyśmy aby oddzielnie przełączały się te dwie pary radiobuttonów, wtedy z pomocą przychodzi kontrolka GroupBox - to taka rameczka(kiedyś myślałem ze ona jest tylko dla ozdoby 8-) ). Ona jak sama nazwa wskazuje grupuje kontrolki chociażby kontrolki radiobutton i jeśli chcielibyśmy aby te dwie pary radiobuttonów działały oddzielnie to musimy narysować dwie kontrolki grupbox i montujemy do nich po jednej parze kontrolek i w ten sposób każda para będzie działać w sposób autonomiczny.


Teraz przejdziemy do omówienia ListBox i ComboBox.

Kontrolka ListBox czyli innymi słowy listy wyboru. Do listy wyboru można dodawać elementy po kolei (za pomocą polecenia listbox1.items.Add() ) lub można dodawać zawartość całej tablicy(za pomocą polecenia listbox1.items.AddRange() Lista ta może działać tak że elementy(które są typu string) będą wyświetlane w jednej kolumnie lub w kilku odpowiada za to właściwość MultiColum, która ta właściwość jest typu boolowskiego(prawda lub fałsz).
Następną kontrolką którą omówimy jest ComboBox. Jest to rozwijalna lista wyboru, w której możemy dodawać elementy pokolei(za pomocą polecenia combox1.items.Add() ) lub dodawać całą tablicę(za pomocą polecenia AddRange).

Z tymi dwiema kontrolkami zapoznamy się bardziej(mam taką nadzieję ;) ) na podstawie poniższego przykładu.

Obrazek

Tak mniej więcej wygląda projekt mojej aplikacji. Aby uzyskać pomarańczowy kolor texboxa należy poszukać we właściwościach textbox właściwość BackColor. Ustawiłem również białą czcionkę przez właściwość ForeColor.

Teraz przejdźmy do oprogramowania zdarzenia kliknięcia dla button1 czyli u mnie "Zapisz do combox"

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


Teraz przejdźmy do oprgramowania zdarzenia kliknięcia dla button2 czyli u mnie "Zapisz do listbox"

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


Mamy już zrobione dodawania tekstu do comboboxa i listboxa, teraz więc przejdziemy do oprogramowania zdarzen dla przycisków button3("Wczytaj z comboxa") i button4("Wczytaj z listboxa")

Wczytywanie z comboboxa:

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


Wczytywanie z listboxa:

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



Po skompilowaniu aplikacja powinna działać tak:

1) przy wczytaniu z comboxa

Obrazek

2) przy wczytaniu z listboxa

Obrazek

Ok, na dzisiaj koniec. Jutro pewnie porozmawiamy sobie o zdarzeniu KeyDown innymi słowy klawiatura która może się przydać do na przykład sterowania robota przez naszego ukochanego :) PC-ta.
Ja jak na razie pokazuję rzeczy podstawowe w aplikacjach okienkowych ale to jest po to aby przy omawianiu RS232(który będzie omówiony na podstawie projektu) nie było żadnych nie domówień, bo wbrew pozorom to się wszystko przyda...

Pozdrawiam Michał!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lip 2012, o 21:46 
Offline
Użytkownik

Dołączył(a): 15 lut 2012
Posty: 344
Lokalizacja: Bydgoszcz
Pomógł: 11

Witajcie!

Dzisiejszy odcinek będzie bardzo krótki. Omówimy sobie w nim zdarzenie KeyDown dla naszej formatki.
Zdarzenie to umożliwia sterowanie zachowaniem naszego programu("zbindowane" funkcje np zapis pliku itp.) lub sterowanie urządzeń przez RS232.

Ok, przejdźmy od razu do sprawdzania działania w sposób empiryczny ;) . Jak zawsze zakładamy nowy projekt i rysujemy na formatce jednego texboxa i to wszystko w temacie samego projektowania aplikacji. Ów aplikacja ta ma obsługiwać klawisze kursorów tj. na textboxie jeśli naciśniemy klaiwsz do góry pojawi się napis UP, jak naciśniemy strzałkę w dół ma się wyświetlić na textbox napis down itd.

Klikamy na formatce i w liście właściowści i zdarzeń klikamy zdarzenia.

Obrazek

Klikamy dwukrotnie i przechodzimy do oprogramowania zdarzenia:

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


I to tyle w temacie zdarzenia KeyDown.

Ok tylko powiedzmy że mamy program do obsługi bazy danych i chcielibyśmy aby z kombinacji ctrl+f pokazało się okno z szukajką ;) . Cóż trzeba użyć e.Modifiers dzięki czemu będziemy mogli korzystać z kombinacji alt,ctrl,shift z innymi klawiszami.

Aby przetestować możliwość korzystania z możliwości kombinacji klawiszy zmienimy wcześniej napisany kod:

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


Ok, na dzisiaj koniec ;) . Nie chcę dalej przynudzać 8-) . Następny prawdopodobnie będzie datagridview i prawdopodobnie kontrolka Chart z tym że dam sobie i wam dzień przerwy ok? ;)

Trzymajcie się!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lip 2012, o 20:19 
Offline
Użytkownik

Dołączył(a): 15 lut 2012
Posty: 344
Lokalizacja: Bydgoszcz
Pomógł: 11

Witajcie :)

W dzisiejszym odcinku porozmawiamy o kontrolce datagridview. Ta kontrolka to nic innego jak tabela do której można zapisywać różnorakie wartości. Borlandowcy :) zapewne pamiętają że w Delphi i C++ Builder był komponent StringGrid.
Jego odpowiednik w Visual Studio to właśnie omawiana kontrolka datagridview. Obsługa tego zwierzaka ;) wygląda znacznie inaczej jak miało to miejsce w produktach Borlanda, otóż jak ktoś korzystał to zapewne pamięta że w obsługa stringgrid wyglądała prawie tak samo(przynajmniej ja miałem takie wrażenie...) jak wpisywanie danych do tablicy wielowymiarowej i druga współrzędna odpowiadała za wiersze i właśnie pozycja 0 w drugiej współrzędnej była zarezerwowana dla nagłówka kolumny. W Visual Studio tak nie ma, ponieważ za etykiety kolumn i wierszy odpowiadają właściwości datagridview(wg. mnie to spore ułatwienie).
Sama kontrolka datagridview znajduje się w kategorii data. Ok, dla testu narysujcie sobie taką tabelkę na formatce.

Obrazek

Teraz dodamy kolumny poprzez kliknięcie add column. Po tym pojawi się to okno

Obrazek

W tym okienku możemy nazwać nazwę kolumny która będzie widoczna w kodzie źródłowym programu i etykietę dla kolumny.

Teraz przejdźmy do zaprojektowania aplikacji na potrzeby tego ćwiczenia i 2 innych które wkrótce się pojawią...

Obrazek

Na zdjęciu widać że tabela ma wyłączony taki boczny paseczek który informuje o stanie komórek(czy są one edytowane,dodawane czy po prostu są podglądane) za ten "boczny paseczek" odpowiada właściwość RowHeaderVisible która przyjmuje wartości prawda lub fałsz. Ja zawsze go chowam ponieważ on nie jest zbytnio potrzebny w wypadku aplikacji które nie obsługują baz danych.

Dobrze, mamy zaprojektowany interfejs , teraz przejdziemy do programowania ;)

Przed oprogramowywaniem przycisków musimy utworzyć zmienną i która będzie odpowiadała za numer wiersza:

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


Na pierwszy ogień pójdzie przycisk "Dodaj dane" - u mnie w kodzie źródłowym nosi nazwę Button1

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


Tutaj widać te różnicę dzielące obsługę "tabele" w produktach borlanda i visual studio. W Visual Studio mamy wyszczególnione wiersze i komórki.

Jeśli zrobiliśmy obsługę dodawania do tabeli to żeby się nie zaklikać na śmierć :D zrobimy dodawanie danych z poziomu klawiatury, poprzez oprogramowanie zdarzenia KeyDown dla formatki o którym rozmawialiśmy w poprzednim odcinku poradnika.

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



Jak widać w powyższym kodzie dodawania odbywa się za pomocą klawisza insert. Tak w ogóle celowo zmieniłem wartości ponieważ będzie to potrzebne przy omawianiu wykresu w następnym odcinku poradnika.

Ok, mamy zrobione dodawanie danych to teraz trzeba pomyśleć o ich usuwaniu. Przejdziemy więc do oprogramowania przycisku "Usuń dane" który będzie kasował całą zawartość tabeli.

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


Ok, teraz by się przydało usuwanie wybranego wiersza ale to zrobimy w zdarzeniu KeyDown. Wystarczy dodać kolejną instrukcję warunkową:

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


Jeszcze zrobimy pewien zabieg kosmetyczny dotyczący sposobu wyświetlania naszych danych otóż bardziej czytelnie i fajnie by było ustawienie naszej tabeli aby wiersz o parzystym indexie miał inny kolor na przykład jakiś niebieski kolor.
Musimy więc oprogramować zdarzenie kontrolki datagridview o nazwie CellFormatting.

Kod obsługi tego zdarzenia:

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

Akurat w C++ Builder sposób wykonania takiej operacji był o wiele bardziej zakręcony :) od tego stosowanego w Visual Studio

Myślę że na tym możemy skończyć :) . Ta kontrolka datagridview to bardzo potrzebne narzędzie w tworzeniu programów które mają odbierać dane po RS232. Można również na podstawie danych zawartych w takiej tabeli stworzyć wykresy i właśnie o tym porozmawiamy w następnym odcinku poradnika.

Pozdrawiam!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lip 2012, o 23:28 
Offline
Użytkownik

Dołączył(a): 15 lut 2012
Posty: 344
Lokalizacja: Bydgoszcz
Pomógł: 11

Witajcie!

W dzisiejszym odcinku porozmawiamy o kontrolce Chart. Mam nadzieję że zapisaliście ostatni projekt gdzie omawialiśmy kontrolkę DataGridView, ponieważ w dzisiejszym ćwiczeniu będzie potrzebny do przedstawiania danych na wykresie...

Ok na początek stworzymy do naszego projektu dodamy nową formatkę która będzie przedstawiała nasz wykres.
Jeśli dodaliśmy już dodaliśmy nową formatkę, ustawmy ją w ten sposób aby nie można była maksymalizować okienka właśnie z tym wykresem poprzez zmianę właściwości MaximizeBox na wartość false. Po zmianie tych ustawień kosmetycznych przejdziemy teraz do dodania wykresu. W kategorii Data znajduję się nasza kontrolka Chart. Klikamy ją i rysujemy ją na naszej formatce(najlepiej tak aby wykres zapełnił cały obszar naszej formatki).


Ok teraz przechodzimy do części poświęconej właściwością tej kontrolki(oczywiście nie będziemy o wszystkich rozmawiać bo zbyt długo by to trwało za to porozmawiamy sobie o najważniejszych właściwościach :) ).

Na pierwszy ogień pójdzie określanie serii dla naszego wykresu:

Obrazek

Tutaj ustawiamy wygląd naszej serii między innymi kolor serii, co ważniejsze to typ wykresu, typy osi i znaczniki(nie widać ich na zdjęcie powyżej). Właśnie te parametry będą w obszarze naszego zainteresowania ;) .

Następną właściwością jaką się zajmiemy jest ChartArea

Obrazek

W sekcji ChartArea mamy do czynienia z ustawieniami siatki wykresu, wyglądu już nie samej serii lecz całości. Właśnie w tej sekcji możemy ustawiać to czy nasz wykres będzie 3D czy nie (na przykład przez odpowiednie oprogramowanie checkboxa ;) ). W tej sekcji mamy podsekcję która również nas dogłębnie zainteresuje a mianowicie chodzi o sekcję Axes:

Obrazek

Nie bez kozery pokazuje ustawienia osi Y ponieważ tam będziemy musieli ustawić skale rysowania wykresu(parametr interval).

Ok teraz przejdziemy do właściwej części ćwiczenia tj. do wybrania typu wykresu, koloru serii jakie będziemy wyświetlać, ustawimy interval wykresu oraz znaczniki.

1) We właściwościach Series a konkretniej Series1 ustawiamy typ wykresu jako liniowy
2) Teraz ustawimy znaczniki wykresu

Obrazek

3) Ustawiamy parametr LegendText na na przykład Wartość 1 tak jak jest w tabeli

4) Teraz dodamy dodamy drugą serię i postąpimy w sposób analogiczny do opisywanego powyżej uwzględniając zmianę koloru markera(u mnie będzie miał kolor pomarańczowy - jakiś odcien tego koloru...) i również zmienimy parametr LegendText na Wartość 2 tak jak w tabeli

5) Teraz przejdziemy do ustawienia parametrów w podsekcji Axes sekcji ChartArea i stop! Słuchajcie w wypadku naszego programu najlepiej jak dla osi Y Interval będzie automatyczny ponieważ mamy do czynienia ze sporym przyrostem wartości ponieważ niech to będzie powiedzmy 50 wiersz lub wyższy to będziemy mieć z tak ogromnymi wartości że wykres najdelikatniej mówiąc nie będzie czytelny... Kiedy zabierzemy się za tworzenie projektu związanego z transmisją RS232(który będzie w oddzielnym wątku) wtedy ustawimy odpowiednią skalę aby by wykres z pobranych danych był "przyjaźniejszy" dla oka ;) .



Obrazek

Teraz przechodzimy do właściwości Modifiers dla kontrolki chart która znajduje się na drugiej formatce zmieniamy na public, aby mieć dostęp z poziomu pierwszej formatki.

Teraz przejdziemy do programowania ;) ale niekoniecznie przycisku do kreślenia wykresu ale do modyfikowania przycisku USUŃ DANE I zdarzeniu KeyDown gdzie mogliśmy usuwać zaznaczony wiersz.

w przycisku usuń dane do polecenia jaki już jest wcześniej należy ustawić wartość zmiennej i na 0 ponieważ przy kreśleniu wykresu na podstawie nowych danych mogło by dojść do błędu.

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


teraz zajmiemy się zdarzeniem on KeyDown - tam zaś za każdym przyciskiem delete będziemy inkrementowali zmienną i

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



Dobra teraz przechodzimy do oprogramowania przycisku WYKRES

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


Tu pojawiła się pewna nowość ponieważ tworzę zmienną WYKRES za każdym naciśnięciem przycisku WYKRES to jest również poprawny zapis ;) i działa w 100%.

Teraz powiem parę słów na temat tych markerów. Nie ustawiałem tego na sztywno tylko na płynno :) ponieważ jak byśmy mieli nawet kilkadziesiąt to byśmy mieli znaczniko-manię :D .

Dobra to tyle z mojej strony a następna lekcja będzie dotyczyła zapisywania i odczytywania plików....

Pozdrawiam!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 lip 2012, o 17:49 
Offline
Użytkownik

Dołączył(a): 15 lut 2012
Posty: 344
Lokalizacja: Bydgoszcz
Pomógł: 11

Witajcie!

W tym odcinku poradnika porozmawiamy sobie na temat zapisywania i odczytywaniu plików. W języku C# za zapisywanie plików odpowiada klasa StreamWriter a za odczytywanie plików klasa StreamReader. Jak same nazwy klas wskazują mamy do czynienia ze strumieniami zapisu i odczytu. Obue klasy posiadają argumenty nazwy pliku(również można napisać całą ścieżkę gdzie ma zostać zapisany lub z skąd ma zostać odczytany plik.

Aby "głębiej" zaprzyjaźnić się ze strumieniami zrobimy prosty program który będzie zapisywał zawartość dwóch textboxów i wczytać zapisane wartości do tych samych textboxów.
Jeszcze przed przystąpieniem do projektowania aplikacji, stworzymy folder(u mnie nazywa się tutek) na przykład na dysku C.

Rysujemy na formatce 2 przyciski i 2 textboxy. Teraz w sekcji gdzie deklarujemy wszystkie biblioteki - tam gdzie są te using System, deklarujemy bibliotekę odpowiedzialną za strumienie czyli using System.IO;

Teraz przejdziemy do oprogramowania przycisku który będzie odpowiadał za zapisywanie pliku:

StreamWriter zapis = new StreamWriter(@"C:\tutek\pola.txt"); //tworzymy strumień zapisu "zapis" z określeniem ścieżki zapisu
Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Pewnie zastanawiające jest to po co jest tam znak @, otóż po to aby poinformować kompilator o tym że tak właśnie ma wyglądać ten łańcuch, że znak '\' nie oznacza tak jak pierwotnie że wystąpią jakieś znaki np \n,\LF itp. Gdybyśmy nie użyli tego znaku kompilator krzyczał by o błędzie.

Teraz przejdziemy do oprogramowania przycisku odpowiadającego za odczyt danych do naszych pól tekstowych.

StreamReader odczyt = new StreamReader(@"C:\tutek\pola.txt"); //tworzymy strumień odczytu "odczyt" z określeniem ścieżki odczytu
Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Teraz przejdziemy do zapisywania i odczytywania zawartości datagridview czyli naszej tabeli.

Otworzymy sobie projekt gdzie wykonywaliśmy ćwiczenia z DataGridView i kontrolką Chart.

Obrazek

Teraz przejdziemy do oprogramowania przycisku "Zapisz"

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



O ile zapis nie był problemowy to odczyt może być małym problemem. Ci którzy wcześniej mieli styczność ze środowiskami od Borland wiedzą że do komponentu StringGrid była dołączona właściwość która odpowiadała za oddzielanie danych separatorem i nie było większych problemów z odczytem, jednak w Visual C# trochę trzeba zrobić to na piechotę.
Z pomocą jednak przyjdzie metoda split, dzięki której możemy zapisywać wartości oddzielone określonym separatorem do tablicy.

Przejdziemy teraz do oprogramowania przycisku Wczytaj

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


No dobrze mamy zapisywanie i odczyt ale powiedzmy że chcielibyśmy mieć możliwość zapisywania kilku tabel na kilku różnych plikach, i odczytania dowolnego pliku. Z pomocą przychodzą nam okna dialogowe zapisu(saveFileDialog) i odczytu(openFileDialog). Oba okna dialogowe w postaci kontrolek odnajdziemy w kategorii Dialogs na palecie kontrolek.

Dobrze przejdziemy teraz do oprogramowania przycisku Zapisz Jako:

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


Jeśli mamy już oprogramowany przycisk 'Zapisz Jako' to zabierzemy się za oprogramowanie przycisku Otwórz:

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


Ok, na tym zakończymy. Powiem tylko tyle że okna dialogowe powinno stosować się do zapisywania danych w dowolnej lokacji a nie tylko w jednym docelowym folderze. Właśnie zapisywanie danych do jednego folderu jest przydatne na przykład dla zapisywania pliku z zapisaną konfiguracją programu.

Następna lekcja będzie prawdopodobnie poświęcona wyjątkom które będą wykorzystywane do obsługi na przykład odbioru danych...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 wrz 2012, o 21:58 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

MichalXY napisał(a):
Klikamy na Type Here(ogólnie to można określi czy ma być to item menu czy też jakaś lista rozwijana(combox) czy pole tekstowe) i określamy nazwę dla I kategorii menu(nazwa będzie widoczna w programie jak i w kodzie źródłowym) - ja dałem nazwę Polecenie. Po kliknięciu kategorii Polecenie pojawi się podkategoria, nazwiemy sobie ją test1. Jak już to zrobicie to zobaczycie że pojawi się kolejna i tak w kółko. My poprzestaniemy na 2 podkategoriach.

Ja bym jeszcze dodał że przy wpisaniu & (and ) przed jedną z literek w nazwie Polecenie utworzymy skót klawiaturowy ;)
Przykład : Polecenie --> Pole&cenie
Da nam w efekcie skrót po wciśnieciu ALT


I taka składnia nie tylko się tyczy nazw w menu ale także przycisków i innych ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 paź 2012, o 15:08 
Offline
Użytkownik

Dołączył(a): 15 lut 2012
Posty: 344
Lokalizacja: Bydgoszcz
Pomógł: 11

Witam!

Dzisiejszy odcinek poświecę 5 nowym komponentom: tabcontrol, numericupdown, timer, notifyicon i richtexbox.

Pierwsza kontrolka to nic innego jak zakładki, dzięki którym można zwiększyć czytelność interfejsu dla użytkownika.
Zakładki te są "załadowane" w kolekcji i właśnie tam można dodawać kolejne zakładki(domyślnie po położeniu na formę są dwie zakładki). Kontrolka ta znajduje się w zakładce Containers.

Druga kontrolka numericupdown to nic innego jak pole tekstowe które posiada scroll bary do zwiększania lub zmniejszania wyświetlanej wartości. Typ wartość jakie wyświetla i przetwarza ta kontrolka to decimal, więc w czasie korzystania będzie trzeba tą wartość konwertować na typ Int. Kontrolka ta znajduje się w zakłdce Common Controls.

Kolejną kontrolkę jest Timer. Jest to kontrolka niewizualna i odpowiada ona za wykonywanie pewnych poleceń(np. zmiana wartości zmiennej , wysyłanie znaków na port szeregowy) w pewnych odstępach czasu. Sama kontrolka wykorzystuje mechanizm przerwań procesora. Kontrolka ta znajduje się w zakładce Components.

Przedostatnią kontrolką jest notifyicon która odpowiada za wyświetlanie ikony w trayu, dzięki czemu można będzie "ukrywać program" - nie będzie widoczny w pasku zadań( w sumie w ogóle nie będzie go widać ;) ). Taki zabieg pozwoli na prace programu w tle co przydaje się w programach do sterowania urządzeniami pomiarowymi - np. rejestratorami temperatury....
Kontrolka ta znajduje się w zakładce Common Controls.

Ostatnią kontrolką jest richTextBox który jest troszkę bardziej zaawansowanym polem tekstowym 8-) tj. można przejść do nowej linii, sformatować pod nasze potrzeby zaznaczony tekst itp.

Ok, teraz przechodzimy od słów do czynów. Zgodnie z tradycją zakładamy nowy projekt i zabieramy się do projektowania interfejsu. W ramach dydaktyki zbudujemy sobie minutnik i budzik( a raczej alarm).

Obrazek
ryc.1a - Widok pierwszej zakładki

Obrazek
ryc.1b - Widok drugiej zakładki

Zapewne zauważyliście takie dwa prostokąciki i zastanawiacie co to jest za ustrojstwo, już śpieszę z wyjaśnieniami :) jest to kontrolka panel która znajduje się w zakładce Containters. Ogólnie jej zastosowaniem jest przechowywanie innych kontrolek jednak my wykorzystamy je jako kontrolki sygnalizujące o stanie programu - ot takie diody LED :lol: .


Teraz przejdziemy do programowania ;) . Pisanie programu zaczniemy od zdefiniowania i zainicjalizowania dwóch zmiennych typu int tj. sekundy i minuty

Obrazek

Teraz przejdziemy do oprogramowania zdarzenia load dla naszej formy. Ustawimy kolory kontrolek Panel , wyświetlimy datę wyświetlaną przez kontrolkę label2 i wystartujemy timer który odpowiada za wyświetlanie czasu.

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


Kolejnym elementem jaki przyjdzie nam do oprogramowania jest zdarzenie resize dla naszej formy. Będzie to potrzebne do współpracy z kontrolka notifyIcon aby minimalizacja formy prowadziła do ukrycia formy z paska zadań jak i samego pulpitu.

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


W C++ Builder XE mieliśmy do dyspozycji mieliśmy do dyspozycji komponent CTray i jednym z jego zdarzeń była właśnie minimalizacja aplikacji do Traya. W przypadku Visual C# należy robić to troszeczkę na piechotę....

Kolejnym elementem do oprogramowania będzie zdarzenie Click dla kontrolki notifyIcon które to zdarzenie będzie pokazywało z powrotem formę naszej aplikacji i pokaże ją w pasku zadań.

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



Następnym elementem do oprogramowania będzie przycisk OK który znajduje się w drugiej zakładce naszej aplikacji.

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


Tutaj jest sporo warunków ale jest to spowodowane płynnym dopisywaniem zera do jednocyfrowych minut i godzin, ale mam nadzieje że kod jest mimo wszystko czytelny ;) .

Teraz przyszedł czas na oprogramowanie zdarzenia tick dla kontrolki Timer1, jednak zanim przystąpimy do programowania musimy zmienić parametr Interval ponieważ jest on domyślnie ustawiony na 100ms a my musimy uzyskać odstęp rzędu 1s czyli 1000ms. To samo należy poczynić dla drugiej kontrolki Timer która będzie obsługiwała odliczanie czasu dla naszego licznika czasu.

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



Teraz przyszedł czas na oprogramowanie drugiego Timera

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


Tutaj w zdarzeniu timera robimy nic innego jak co sekundę inkrementujemy liczbę sekund a następnie co minute liczbę minut.


Można powiedzieć że program jest gotowy ale przecież trzeba jeszcze parę rzeczy poustawiać...
Na pierwszy ogień pójdzie ustawienie ikony do kontrolki notifyicon. W tym celu należy przejść do parametru Icon i tam wybrać odpowiednią ikonę - w rozmiarze 16X16 (rysunek poniżej)

Obrazek

Drugą rzeczą będzie ustawienie ikonki dla naszej Formatki

Obrazek

I na sam koniec ustawimy ikonę dla całej aplikacji. W tym celu należy przejść do właściwości projektu(Project->"Nazwa_Projektu Proporties)

Obrazek

Pole właściwości aplikacji

Obrazek

Myślę że na tym można zakończyć tą lekcję. Następna będzie poświęcona transmisji RS232.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 paź 2012, o 15:17 
Offline
Użytkownik

Dołączył(a): 15 lut 2012
Posty: 344
Lokalizacja: Bydgoszcz
Pomógł: 11

Witajcie!

W dzisiejszym odcinku poznamy w jaki sposób obsłużyć transmisję RS232 w Visual C# oraz co najważniejsze w jaki sposób parsować nadlatujące dane...

W Visual C# mamy odpowiednią kontrolkę do obsługi tego typu transmisji tj. kontrolkę serialport w zakładce Components

rysunek_kontrolka

Kontrolka ta daje nam do dyspozycji wiele metod, jednak my zainteresujemy się tymi:

a) Open()
b) BaudRate()
c) PortName()
d) ReadTo()
e) Write()


ad a. Metoda ta odpowiada za otwarcie portu. Zadziała jeżeli określimy poprawną nazwę portu szeregowego(ex. COM1, COM2 etc)

ad b. Metoda ta odpowiada za określenie prędkości transmisji - pobiera ona dane typu int.

ad c. Metoda ta pozwala na ustawienie ustawienie nazwy portu szeregowego jaki chcemy otworzyć - pobiera ona dane typu string. Powinna być ona ustawiona w kodzie źródłowym programu przed operacją otwarcia portu lub ustawiona we właściwościach kontrolki.

ad d. Metoda ReadTo pozwala na odebranie łańcucha via RS232 do napotkania jakiegoś znaku( ex. ReadTo("\n") ) w przypadku przykładu łańcuch zostanie odczytany do napotkania znaku nowej linii, i właśnie takim znakiem będziemy kończyć każdorazowe odebranie łańcucha. Sam łańcuch zostanie przekazany do zadeklarowanej zmiennej typu string.

ad e. Metoda ta pozwala na przesłanie łańcucha lub pojedynczego znaku.


#2 - PARSOWANIE ŁAŃCUCHA

Odebrany łańcuch w nomenklaturze transmisji danych nazywamy ramką. Nasza ramka będzie miała następującą postać:

Kod:
32,27,28ABF953,2835C5B8,\r\n


Ramka składa się z temperatury pierwszego czujnika następnie temperatury drugiego czujnika a potem są numery seryjne tych dwóch czujników DS18B20 a na końcu jest znak karetki i nowej linii.

Zauważcie że łańcuch został podzielony na tokeny(o nich była mowa w pierwszej książce Mirka w rozdziale o TCP/IP) tak aby łatwo było ją analizować.

Po tej dawce teorii trzeba przejść do praktyki ;) .

Tradycyjnie zakładamy nowy projekt i przechodzimy do projektowania aplikacji. W moim przypadku aplikacja składa się z trzech form(W pierwszej będziemy ustawiać rejestrator i podglądać dane ON-LINE, w drugiej zaś będzie tabela pomiarowa która pozwoli na podgląd temperatur z czujników, dat i godzin odbioru danych, wyliczenie amplitudy temperatur z poszczególnych czujników, wartości maksymalnych i minimalnych oraz wartości średnich. Co najważniejsze będzie można kreślić wykres temperatury powietrza i ustawieniu zakresu kreślenia(data pomiaru). Trzecia forma będzie podglądem wykresu który zostanie narysowany na podstawie tabeli pomiarowej.

Pierwszą formę przygotujemy tak aby można było dokonywać swobodnego wyboru portu komunikacyjnego, interwału czasowego pomiaru temperatury. Dodamy również możliwość podglądu temperatur z obu czujnikach na odpowiadnio sformatowanych textboxach. Również dodamy możliwość przedstawienia numerów seryjnych za pomocą kontrolki label.


Obrazek

Obrazek




Dobra teraz przechodzimy do oprogramowania zdarzenia Load dla pierwszej formuły:

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


W kodzie znajduje się nowa pętla foreach któa odpowiada za poruszanie się po kolekcji a konkretniej mówiąc przełączenie pomiędzy poszczególnymi elementami kolekcji - w naszym przypadku tablicy port.

Skoro mamy oprogramowane zdarzenie ładowania Formy to teraz przejdziemy do oprogramowanie przycisku Połącz który będzie umożliwiał łączenie z portem COM jak i rozłączanie się z nim.

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

Po raz kolejny pojawia się novum w postaci bloku try i catch. Blok ten odpowiada za obsługę błędów. W części try umieszczamy czynności które mogą być niebezpieczne dla poprawnego działania aplikacji - chodzi o to że wykonanie danych czynności może doprowadzić do błędu(zwykle z winy samego użytkownika :P ). W części catch znajduje się czynności które potencjalny błąd obsługują m.in tam są wstawiane czynności odpowiadające za wyświetlenie komunikatu o błędzie, nawet wyłączenie samej aplikacji.

Teraz przejdziemy do oprogramowania przycisku START który będzie odpowiadał za rozpoczęcie pomiaru temperatury.

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



Głównym zadaniem tego przycisku jest włączanie/wyłączanie timery i jego startowanie/zatrzymywanie. Ustawia on również bardzo ważny parametr jakim jest Interval czyli odcinek czasowy jaki będzie timer odmierzać.
Chciałbym również nadmienić o tym że kontrolkę timer należy ustawić aby parametr Enable był ustawiony na false. Można wykonać to w kodzie źródłowym lub we właściwościach samej kontrolki.

Teraz przejdziemy do oprogramowania zdarzenia tick dla kontrolki Timer


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


Tak... ten kod zdarzenia który razi swoją wielkością tak na prawdę uruchamia całą machinę m.in wydaje rozkaz rozpoczęcia pomiaru i wysyłania do naszego programu temperatur i numerów seryjnych(tak bynajmniej ja mam napisany program do uC.

Teraz przejdziemy do całego gwoździa programu - zdarzenia odbioru danych. Na początek jednak przejdziemy znanym skrótem F7 do kodu źródłowego pierwszej formy. W przestrzeni nazw zadeklarujemy zmienne które będziemy później wykorzystywać do pewnych operacji...

rysunek kod

Ok! Teraz przechodzimy do zdarzenia DataReceived kontrolki serialport.

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



W kodzie obsługi zdarzenia widać warunek który czyści łańcuch po pierwszym odbiorze danych, dlaczego go umieściłem? Już tłumaczę, kiedy testowałem programy z wykorzystaniem kontrolki serialport miałem do czynienia ze źle odbieranymi łańcuchami po resecie urządzenia po "nie poprawnym rozłączeniu programu z portem com(wyłączałem program bez uprzedniego zamknięcia portu com) otrzymywałem złe dane np. zamiast 32 otrzymywałem 3232 lub inne tego typu kwiatki... i z tego powodu tak się zabezpieczyłem :) .


Do projektu Logera temperatury pozwoliłem sobie dodać zakładkę Terminal w której umieściłem odpowiednio sformatowaną kontrolkę richtextbox(kontrolka znajduje się w zakładce common controls) która będzie pełniła role tego terminala. Kontrolkę tą dostosowałem w ten sposób że tło(właściwość BackColor) ustawiłem na czarny a kolor tekstu(właściwość ForeColor) ustawiłem na kolor Limonkowy ;).
Terminal ten pozwoli za zaobserwowanie nadlatujących ramek z urządzenia via port COM.

Teraz przejdziemy do zdarzenia które odpowiadać będzie za parsowanie odebranego łańcucha.

Jak już wcześniej wspominałem łańcuch podzieliłem na tokeny(odseparowałem poszczególne dane przecinkiem) tak aby można było w prosty sposób przeanalizować nadlatujących łańcuch i "wyjąć z tego łańcucha" dane do poszczególnych elementów naszej aplikacji.
Zapewne zastanawiacie się dlaczego musiałem utworzyć nowe zdarzenie do tego a nie mogłem po prostu umieścić parsowania danych bezpośrednio w zdarzeniu odbiorczym, otóż w tego typu zdarzeniach nie można "montować" skomplikowanych czynności ponieważ nie dało by ich się wykonać w tym jednym zdarzeniu - kompilator przy próbie skompilowania programu gdzie właśnie bezpośrednio unieślibyśmy takie czynności w tego typu zdarzeniach, nie chciał by go skompilować.

Do samego parsowania danych wykorzystałem znaną metodę split - czyli załadowanie do tablicy elementów odseparowanych wybranym przez nas znakiem(w naszym przypadku to przecinek). W zdarzeniu tym będziemy cyklicznie powiększać zdefiniowane tablice o 1 ponieważ tam będziemy zapisywać już wyodrębnione dane do poszczególnych tablic aby móc je później wysłać do tablicy pomiarowej do dalszej analizy...

Kod zdarzenia parsującego dane:

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



Teraz gdy nasze dane zostały odpowiednio wyodrębnione dla relaksu oprogramujemy przycisk Tabela pomiarowa

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


Myślę że w przypadku tego przycisku nie muszę nic więcej mówić ponieważ najważniejsze elementy są okraszone odpowiednim komentarzem ;) .

Teraz zabierzemy się za checkbox Wykres 3D - będzie on odpowiadać za włączanie/wyłączanie widoku 3D wykresu w pierwszej formie.

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


Wszelkiego rodzaju prace na pierwszej formie zostały zakończone więc teraz przejdziemy do drugiej formy naszego loggera temperatury.

Obrazek

Nie będę opisywał wszystkich elementów które znajdują się na drugiej formie. Jak włączycie aplikacje(postarm się gdzieś wrzucić wersje skompilowaną i źródłową do pobrania) zauważycie że jest tam takie(a raczej są :) ) pola tekstowe z maską wprowadzającą dane. Jest to kontrolka mascedTextBox, która znajduje się w zakłdce Common Controls.

Jeśli chodzi o przyciski to tutaj pokaże kod obsługi kreślenia wykresu na podstawie danych z poszczególnych dni:

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



Pierwsza pętla for odpowiedzialna jest za odnalezienie pierwszej daty pomiaru. Gdy zostanie ona odnaleziona(zostanie spełniony warunek że zawartość pola maskedTextBox będzie taka sam jak wartość zmiennej łańcuchowej kompar - czyli wartości cyklicznie pobieranej z naszej tabeli w pętli for) pętla for zostaje przerwana i program przechodzi do następnej pętli która szuka drugiej daty.Tam zaś gdy zostanie odnaleziona druga data poszukiwania nie są zakończone, ponieważ pętla for się obraca aż do ostatniej temperatury która jest przydzielona drugiej dacie którą mamy zapisaną w drugim polu maskedTextBox. A na sam koniec w trzeciej pętli for zostają pobrane adresy do dat a raczej do wyników pomiarów i zostają wykreślone dwa wykresy.

Najlepiej jak sami przeanalizujecie na spokojnie algorytm jaki jest w programie i wtedy jeszcze bardziej będzie wszystko jasne ;) .


Trzeciego formularza nie będę opisywał bo jest tam tylko wykres dwóch temperatur.


Tym samym kończę cykl poradników do Visual C# na forum, następne być może(jak czas pozwoli) pojawią się na blogu który mam zamiar założyć lub na jakiejś stronie - o czym będę informować na bieżąco. Mam nadzieje że udało mi się w miarę jasno i zrozumiale dla otoczenia przedstawić wam jak łatwo można korzystać z Visual C# i finalnie wykonać program do komunikowania się z własnym urządzeniem z wykorzystaniem parsowania danych które według mnie jest nieodzowne do wykonywanie programów do sprzętu pomiarowego.


Załączniki:

Aby zobaczyć załączniki musisz się zalogować. Tylko zalogowani użytkownicy mogą oglądać i pobierać załączniki.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 paź 2012, o 11:17 
Offline
Moderator zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 18 lip 2012
Posty: 3206
Lokalizacja: Kraków - obok FAB5 ATMEL'a
Pomógł: 90

A jak się zabezpieczyć przed tym że np. po przeniesieniu skompilowanego programu ma inny komputer nagle okaże się że program nie uruchomi się ponieważ brakuje jakieś biblioteki?

_________________
http://www.jaglarz.info



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 paź 2012, o 15:07 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Jakie biblioteki masz na myśli? Myślę, że sam sobie ściągnie update Frameworka. A zaglądałeś do Project->TermoLogger_2->Publish i przycisk Prerequisites. Tam masz szereg opcji do wyboru, a domyślnie tak stworzony instalator (PublishWizard ) sam ściągnie .NET 4 Framework z internetu podczas instalacji. W Project->TermoLogger_2->Application możesz również wybrać na samym początku starszą wersję .NET Framework i może obejdzie się bez ściągania.

PS.
W nowych komputerach nie ma portu COM na stałe i dlatego myślę, że należy:
Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

rozszerzyć w następujący sposób, bo inaczej Windows zgłosi błąd przy braku portu np. po wyjęciu wtyczki USB z zestawu ATB.
Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

PS.2.
Super poradnik :D

_________________
Dragonus Cracovus: Biomagia



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: 82 ]  Przejdź na stronę 1, 2, 3  Następna strona

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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO