Professional Documents
Culture Documents
Tablice informatyczne-C #
Tablice informatyczne-C #
2
Tablice in fo rm a ty c z n e . C # . W yd an ie II
Dysponując taką metodą, można utworzyć obiekt delegacji re tu rn "Ssak, "; Oto przykład: Oczywiście do metod anonimowych można przekazywać
i korzystać z niego (nazwę metody należy podać jako parametr } S t r in g ś c ie ż k a = " c t W s c ie z k a " ; argumenty. Kontynuując przykład, klasa T h re a d przyjmuje
konstruktora delegacji, niezależnie od parametrów w niej } C # akceptuje też zapisywanie łańcuchów w postaci literałów @. także delegację typu P a ra m e tr i z e d T h r e a d S t a r t
zadeklarowanych): c l a s s C z ło w ie k : S s a k Literały takie zapisuje się, zaczynając łańcuchy od znaku @, np.: o następującej treści: d e l e g a te v o id
W y św ie tl K o m u n ik a t d e l e g a c j a = new { S t r i n g in n y _ t e k s t = @ " ja k is t e k s t " ; P a r a m e t r iz e d T h r e a d S t a r t (O b je c t o b i e k t ) ;.
Wyswi e tlK o m u n i k a t(W y ś w ie tlW O k i e n k u ) ; p u b l i c C z l o w i e k ( S t r i n g im ię ) : Łańcuchy @nie są przetwarzane przez program, można więc
b a se () Oto p r z y ld a d :
d e le g a c ja (" t r e s c " ); zapisywać w nich znaki lewego ukośnika bez użycia podwójnego
T h re a d t = new T h r e a d (
Jak juz wspomniałem, z typu delegacp można korzystać jak z każdego { lewego ukośnika:
M e ssa g e B o x . S h o w ("tw o rzym y o b ie k t d e l e g a t e ( o b j e c t o) { C o n s o le .
innego typu, również wykorzystując go jako parametry dla metod: S t r i n g in n a S c i e z k a = @ " c : \ s c ie z k a \
c z lo w ie k a " ) ; W r ite L in e ( " N o w y w ą te k : " + o ) ; }
p u b l i c v o id p li k . t x t " ;
In n a M e to d a (W y sw ie tlK o m u n i k a t m etoda) t h i s . im ię = im ię ; Aby u ż y ć w t a k im ła ń c u c h u z n a k );
} t.S ta rt(" te s t" );
{ c u d z y s ło w u , n a le ż y z a p i s a ć go dwa
M e t o d a ( " je s z c z e in n y k o m u n ik a t " ); p u b lic bool Porów naj L u d z i( C z ło w ie k c) ra zy : Kompilator sam rozróżnia podane metody anonimowe; jest on
} ( S tr in g te k s t = " " k o le jn y t e k s t " w stanie dopasować zarówno metodę bezparametryczną (do delegacji
Delegacje są bardzo często wykorzystywane w mechanizmie zdarzeń. re tu rn ( c .T o S t r in g O - = t h is . " - t e k s t w c u d z y s ł o w ie " ; // wyświetla:
T o Stri n g( ) ) ; typu T h r e a d S t a r t ), jak i parametryczną (do delegacji typu
„ Kolejny tekst" - tekst w cudzysłowie P a r a m e tr i z e d T h r e a d S t a r t ).
Zdarzenia }
Mechanizm zdarzeń umożliwia reakcję programu na różne sytuacje,
p u b lic o v e r rid e S t r in g T o S t r in g O
{
Atrybuty Wyrażenia lambda
takie jak kliknięcie przycisku, zaznaczenie opcji czy wczytanie danych. Atrybuty pozwalają na dodawanie do klas, interfejsów, metod Wyrażenia lambda stanowią usprawnienie metod anonimowych,
re tu rn b a s e .T o S t r in g O +
Dzięki temu mechanizmowi w momencie zajścia takiego zdarzenia i innych elementów języka C # specjalnych informacji, stanowiących głównie pod względem zwięzłości i przejrzystości zapisu Odnosząc
" C z ło w ie k - 11 + t h i s . im ię ;
informowane są wszystkie obiekty, które uprzednio zadeklarowały swego rodzaju metadane. Atrybuty me wpływają bezpośrednio się do poprzedniego przykładu, efekt przepisania go w wersji
} bezparametrycznej przy użyciu wyrażeń lambda jest następujący:
chęć nasłuchiwania zdarzeń. p u b l i c b o o l T e s to w a ( ) na kod klasy, ale za to na jej działanie. Atrybuty są intensywnie
Aby dodać do danego zdarzenia metodę obsługi, wykorzystuje się wykorzystywane m.in. w WCF, gdzie niewielkie zmiany wprowadzane T h re a d t = new T h r e a d (
f () => C o n s o le .W r ite L in e (" N o w y w ą te k")
operator +=: re tu rn t h is .P o r o w n a jL u d z i( t h i s ) ; w wartościach atrybutów potrafią modyfikować działanie
p u b l i c v o id M e t o d a O b s lu g i( o b j e c t //zawsze zwróci true całych aplikacji! );
s e n d e r , E v e n t A r g s e) Od strony praktycznej atrybut jest klasą, która dziedziczy po klasie t.S ta r t();
i
p r iv a t e S t r in g im ię ; S y s t e m . A t t r i b u tę . Zgodnie z konwencją klasa atrybutu Tak naprawdę powyższy przypadek wyrażenia lambda jest niezwykle
(
// treść obsługi powinna kończyć się słowem A t t r i b u tę . Wykorzystując atrybut, specyficzny. Głównym zastosowaniem tego typu wyrażeń jest
należy podać jego nazwę w nawiasach kwadratowych przed wybranym wykonywanie operacji na podanych argumentach, co najczęściej wiąże
}
S y s t e m .W in d o w s .F o r m s .B u tt o n p r z y c i s k = Klasa S s a k przesłania metodę T o S t r i n g ( ) , która jest używana elementem. się ze zwracaniem wartości. W wyrażeniach lambda nie trzeba jednak
new S y s t e m .W in d o w s .F o r m s . B u t t o n ( ) ; przez wszystkie klasy do zwrócenia najważniejszych wartości i opisów Jednym z najbardziej znanych atrybutów jest S e r i a l i z a b l e. korzystać z instrukcji r e t u r n :
p r z y c i s k . C l i c k += new S y ste m . (jest zadeklarowana w klasie Obj e c t). W klasie C z l owi ek d e le g a t e d o u b le
Klasa oznaczona takim atrybutem może być serializowana, np. za
E v e n t H a n d le r (M e t o d a O b s lu g i) ; w kilku metodach odwołujemy się do obiektu samej klasy (choć F u n k c ja Je d n o w y m ia ro w a (d o u b le x ) ;
pomocą klasy B i n a r y F o r m a t te r lub S o a p F o r m a tte r :
Zdarzenie C l i c k przycisku przyjmuje domyślny typ zdarzeń, nie jest to wymagane). Wreszcie w metodzie T e sto w a () s t a t i c v o id M a i n ( s t r i n g [ ] a r g s )
[ S e r i a l i ż a b ie ]
czyli E v e n tH a n d l e r. Jest to delegacja, której nagłówek jest korzystamy ze słowa t h i s, aby przekazać aktualny obiekt. Jako c l a s s C z ło w ie k
taki, jak nagłówek M etod aO b sl u g i () Operator += oznacza, żewmetodzie P o ró w n a j L u d z i ( ) obiekt podany w parametrze F u n k c ja Je d n o w y m ia ro w a o d w ro tn o ść
{
ze do danego zdarzenia może być przypisanych wiele obiektów jest porównywany z aktualną referencją obiektu (ponownie = ( x ) => (x != 0 ? l / x : D o u b le .
p u b lic i n t Waga { g e t ; p r iv a t e s e t ; }
delegacji — wszystkie one będą informowane o danym zdarzeniu. słowo kluczowe t h i s), metoda T e sto w a ( ) zawsze zwraca P o s it iv e ln f in it y ) ;
} C o n s o le . W r it e L in e ( o d w r o t n o ś ć ( 3 ) ) ;
Aby móc dodać dowolną metodę obsługi zdarzenia, trzeba t r u e . Słowo kluczowe b a s e pojawia się w dwóch miejscach: Atrybuty, będące w istocie normalnymi klasami, mogą przyjmować
znać nazwę zdarzenia obiektu (np. C l i c k ) , nazwę delegacji w m e tod zieTo String()klasyCzlow iek(d ziękitem u C o n s o le .R e a d K e y O ;
różnego rodzaju parametry, Dobry przykład stanowi atrybut
(np. E v e n tH a n d l e r) i jej budowę oraz nazwę metody wywołanej wynik działania tej metody przyjmuje postać „Ssak, Człowiek — imię") A t t r i b u t e lls a g e , stosowany w deklaracjach klas atrybutów:
przez zdarzenie (M etodaO bsl u g i). oraz w konstruktorze (w tym przypadku stanowi odwołanie do W tym przypadku najpierw deklarujemy delegację typową
[ A t t r i b u t e lls a g e ( A t t r i b u t e T a r g e t s .
konstruktora klasy bazowe|). Musi ono być umieszczone przed dla jednowymiarowych (|ednoargumentowych) operacji
C la s s , A llo w M u lt ip le = f a ls e ) ]
Rzutowanie właściwym blokiem instrukcji. c l a s s W a z n o s c K la s y : A t t r i b u t e
arytmetycznych. Do tego typu delegacji przypisujemy
Jedną z najczęściej wykonywanych czynności jest konwersja między jednoargumentowe wyrażenie lambda, którego treścią jest proste
typami danych. Najłatwiej jest dokonać konwersji typów prymitywnych Wyjątki (
p u b l i c i n t W a rto ść { g e t ; se t; }
wyrażenie arytmetyczne — jeśli x jest różne od 0, możemy obliczyć
(np. liczbowych) na typ S t r i n g — wystarczy wywołać metodę C # oferuje obsługę wyjątków przy użyciu klauzuli t r y . . odwrotność podanej liczby, w przeciwnym razie zwracamy +oo.
T o S t r i n g O zadeklarowanąwklasieobject.acozatymidzie c a t c h . . f i n a l l y . Czynności, które mogą spowodować } Następnie możemy używać delegacji w klasyczny sposob — tak jakby
W tym przypadku pierwszy argument stanowi wartość typu była ona funkcją.
— dostępną we wszystkich klasach języka C# powstanie wyjątku (np. przerwanie połączenia sieciowego, błąd
wyliczeniowego A t t r ib u t e T a r g e t s .J e s t t o wartość, W powyższym przykładzie nie podaliśmy typów argumentów
Czasem zachodzi konieczność skonwertowania np. typu zapisu danych na dysku itp.) są ujmowane w blok instrukcji oznaczony
którą normalnie przekazuje się w konstruktorze klasy w wyrażeniu lambda, choć jest to oczywiście dopuszczalne:
zmiennoprzecinkowego na typ całkowitoliczbowy. W takiej sytuacji słowem kluczowym t r y . Następnie jest umieszczany blok c a t c h ,
A t t r i b u te U sa g e . Wartość C l a s s oznacza, ze atrybut F u n k c ja Je d n o w y m ia ro w a o d w ro tn o ść =
można wykorzystać operację rzutowania: w którym umieszcza się czynności informujące użytkownika o błędzie
można stosować tylko do klas. Następnie po określeniu tego jednego, (d o u b le x ) => (x != 0 ? l / x : D o u b le .
i n t zm ie n n a = ( i n t ) 4 . 5 ; (w zależności od rodzaju błędu, który jest identyfikowany na podstawie
wymaganego parametru możemy przekazywać parametry nazwane, P o s it iv e ln f in it y ) ;
Nie zawsze jednak można tego dokonać. Instrukcji rzutowania klasy wyjątku). Wreszcie w sekcji f i na 11 y, bez względu na to,
należy używać z rozwagą, głównie dla typów prymitywnych oraz dzięki którym można określić wartość właściwości tego atrybutu. Wyrażenia lambda są często wykorzystywane w połączeniu z językiem
czy wystąpił wyiątek, czy nie, zwalniane są wykonywane instrukcje
zdefiniowanych przez programistę. Do konwersji obiektów klas, W tym przypadku określamy właściwość A 1 1 owMu 11 i p 1 e, LINQ i API kolekcji (przestrzeń nazw S y s t e m . Co l 1 e c t i o n s .
konieczne do poprawnego działania programu (np zamykanie
struktur i interfejsów zalecane jest użycie operatorów a s i i s. zabraniając używania tego atrybutu do innych klas wielokrotnie. G e n e r i c), dlatego więcej przykładów znajduje się w sekcji
otwartych strumieni).
Operator i s przyjmuje dwa argumenty — po lewej stronie obiekt, Aby zastosować nowy atrybut wobec starej klasy, należy zastosować poświęconej tym zagadnieniom.
po prawe| nazwę klasy, np.: Przykład; następujący zapis:
S y s t e m .W in d o w s .F o r m s .B u tt o n p r z y c i s k = F ile S t r e a m s t r = n u li; [ S e r ia liz a b le ] Metody rozszerzające
new S y s t e m .W in d o w s .F o r m s .B u t t o n ( ) ; try [ W a g a K la s y (W a r to s c = 5 )] Metody rozszerzające pozwalają na dodawanie (rozszerzanie)
i f ( p r z y c i s k i s C o n t r o l) c l a s s C z ło w ie k funkcjonalności już istniejących klas bez konieczności ingerencji
s t r = F ile .0 p e n R e a d (@ " i w ich deklaracje tudzież tworzenie klas dziedziczących. Bardzo
{
// blok instrukcji wykona się
c :\ n ie is t n ie ja c y P lik .t x t " ); u b l i c i n t Waga { g e t ; p r i v a t e s e t ; ) dobry przykład stanowi klasa S t r i ng — jest to klasa zamknięta
} (s e a l ed), dlatego tez nie można utworzyć klasy pochodnej,
}
c a t c h ( F ile N o t F o u n d E x c e p t io n e x ) a jednocześnie klasie S t r i n g brakuje kilku przydatnych operacji,
Wyrażenie z użyciem operatora i s zwróci tru e , jeśli obiekt nie ma
wartości n u l i i jest możliwa konwersja danego obiektu na obiekt { Funkcje anonimowe z których jedną jest możliwość odwrócenia łańcucha. Nic nie stoi
M e s s a g e B o x .S h o w (" B ra k p l i k u ; Funkcje anonimowe w C # występują pod dwiema postaciami: metod na przeszkodzie, aby utworzyć metodę rozszerzającą:
danej klasy bez wygenerowania wyjątku.
" + e x . F i le N a m e ); anonimowych i wyrażeń lambda. Funkcje anonimowe pozwalają na c l a s s P ro gra m
Operator a s przeprowadza rzutowanie lewego argumentu na obiekt
} wygodne i zwięzłe deklaracje funkcji, z możliwością jednoczesnego
klasy określonej prawym argumentem i zwraca ten obiekt lub wartość {
f in a lly wykorzystania ich w kodzie (nie trzeba rozróżniać deklaracji od użycia s t a t ic v o id M a i n ( s t r i n g [ ] a rgs)
n u 11, jeśli operacja nie jest możliwa.
I — stąd nazwa wyrażenia). Wyrażenia lambda są znacznie krótsze,
S y ste m .W in d o w s. F o rm s. C o n t r o l p r z y c i s k i f ( s t r != n u l l )
= new S y s t e m .W in d o w s .F o r m s .B u t t o n ( ) ; niemniej można z nich korzystać, począwszy od NET 3.5 (C# 3.0), C o n s o le . W r i t e L i n e ( " a b e d " .
s t r .C lo s e (); podczas gdy z metod anonimowych można korzystać również
S y s t e m .W in d o w s .F o r m s .B u tt o n nowy = R e v e rs e ());
p r z y c i s k a s S y s t e m .W in d o w s .F o rm s. w NET 2.0 (C# 2.0). C o n s o le .R e a d K e y O ;
B u tto n ;
Klasa Array Metody anonimowe
Metoda anonimowa pozwala na stworzenie wewnętrznej deklaracji
Typ wyliczeniowy Każda tablica jest także obiektem. Jednocześnie wszystkie
tablice dziedziczą po klasie A r r a y . Dzięki temu można metody, bez konieczności podawania jej nazwy, w miejscu, w którym
s t a t i c c l a s s M etody
Zmienna typu wyliczeniowego zawiera zbiór stałych określonych {
wywoływać szereg metod i właściwości udostępnianych przez tę normalnie należałoby podać wartość typu delegacyjnego. Rozważmy
nazwami i wartościami, Typ wyliczeniowy jest deklarowany z użyciem p u b lic s t a t i c S t r in g R e v e r s e (t h is
klasę. Oprócz tego klasa A r r a y upubliczma metody statyczne, przykład kodu tworzącego najprostszy wątek:
słowa kluczowego enum (wewnątrz klasy, ale nie w metodzie!): S t r i n g ła ń c u c h )
zapewniające dodatkową funkcjonalność. Poniżej znajduje się opis s t a t i c v o id M a i n ( s t r i n g [ ] a r g s )
enum M ie s ią c e { S t y , L u t , M a r , K w i , M a j , i
niektórych z nich: c h a r [ ] z n a k i = 1 a n c u c h .T o C h a r A r r a y O ;
C z e ,L ip ,S ie ,W r z ,P a z ,L is ,G r u ) T h re a d z w y k ły = new T h re a d (n e w
M ie s ią c e m ie ś = M i e s i ą c e . S t y ; Metody klasy Array T h re a d S ta rt(M e to d a ));
i n t o s t a t n i = z n a k i . L e n g t h - 1;
Dodatkowo można dokonać konwersji typu wyliczeniowego na i n t G e t L e n g t h ( ) — zwraca liczbę elementów tablicy, f o r ( in t i = 0 ; i < z n a k i.L e n g t h
z w y k ły .S t a r t ( ) ;
całkowitoliczbowy. Domyślnie pierwszy element zbioru ma wartość v o id C o p y T o ( A r r a y t a b l i c a , i n t in d e x ) — / 2 ; 1++)
0, a każdy koleiny jest o 1 większy od poprzednika. W momencie kopiuje całą zawartość swojej tablicy do zmiennej ta b l i ca; pierwszy {
s t a t i c v o id M e to d a ()
wypełniony element zmiennej t a b l i ca będzie miał indeks i ndex. c h a r ch = z n a k i [ o s t a t n i - i ] ;
deklaracji można nadać kolejnym elementom zbioru wartości, np.: ( znaki [o s ta tn i - i] = znaki [ i ] ;
enum M ie s ią c e { S t y = 5 ,L u t ,M a r ,K w i,M a j, Metody klasy Array (statyczne) C o n s o l e .W r ite L in e ( " N o w y w ą t e k " ) ;
z n a k i[ i] = ch;
C z e ,L ip ,S ie ,W r z ,P a z ,L is ,G r u ) v o id C o p y (A r r a y z r o d l o , A r r a y c e l , i n t }
W ten sposób elementy zbioru będą miały wartości od 5 do 16. Klasa T h re a d wymaga przekazania parametru będącego delegacją }
i 1 o s c ) — kopiuje i lo s e elementów od początku tablicy r e t u r n new s t r i n g ( z n a k i ) ;
z r o d l o do tablicy c e l (wklejanie odbywa się również od początku), typu T h r e a d S t a r t — jest to delegacja bezparametryczna,
Słowa kluczowe this i base v o id R e v e r s e ( A r r a y t a b l i c a ) — odwraca kolejność niezwracająca żadnej wartości. W związku z tym konieczne było }
Słowo kluczowe t h i s jest używane w obrębie danej klasy, jeśli utworzenie tradycyjnej deklaracji metody, nawet jeśli nie pojawi się }
elementów tablicy. Warto zauważyć, że deklaracja metody rozszerzającej musi spełnić
istnieje konieczność odniesienia się do jej własnych metod, pól i innych v o id S o r t ( A r r a y t a b l i c a ) — sortuje tablicę ona w żadnym innym miejscu kodu. Konstrukcję tę można uprościć,
dwa warunki: po pierwsze, metoda musi być umieszczona w klasie
elementów. Użycie słowa t h i s, np. jako parametru dla metody, (elementy tablicy muszą być typu, który implementuje interfejs stosując metodę anonimową:
statycznej (sama metoda też musi być statyczna), a po drugie, klasa
powodu|e przekazanie całego obiektu tej klasy. ¡C o m p a ra b le ). s t a t i c v o id M a i n ( s t r i n g [ ] a r g s )
nie może być zagnieżdżona. W tym momencie można przekształcić
Słowo kluczowe b a se pozwala na odwołanie się w klasie potomnej {
do metod i właściwości klasy bazowej. Klasa String T h r e a d t = new T h r e a d ( d e l e g a t e ( )
dowolną metodę w metodę rozszerzającą.
Do przechowywania łańcuchów znaków służy w języku C# klasa W tym celu należy na liście parametrów metody umieścić
{ C o n s o le .W r it e L in e ( „ N o w y w ą t e k " ) ;
S t r i ng. Jest ona klasą dość wyjątkową, aby utworzyć nowy łańcuch (jako pierwszy) parametr postaci:
Przykład użycia obydwu słów kluczowych: } );
znaków, nie trzeba korzystać z konstruktora — wystarczy po prostu t h i s Ń azw aTypu n azw a P a ra m e tru
a b s tr a c t c la s s Ssak t.S ta rt();
przypisać wartość zmiennej: gdzie Nazwa Typu określa typ, do którego chcemy dodać
{ }
p u b lic S s a k ( ) S t r i n g ła ń c u c h = " t e k s t " ; W tym momencie zamiast instrukcji tworzącej nowy obiekt delegacji metodę rozszerzającą (nazwa Parametru może być dowolna).
Tekst musi być ujęty w cudzysłowy. Jeśli istnieje konieczność typu T h r e a d S t a r t tworzymy deklarację metody anonimowej. Ten parametr stanowi bezpośrednie (i jedyne) powiązanie utworzonej
{
M e s s a g e B o x .S h o w (" T w o r z e n ie zawarcia w tekście znaku cudzysłowu bądź innych znaków specjalnych Rozpoczyna się ona od słowa kluczowego d e le g a t e , po którym metody z typem oryginalnym. Należy zwrócić uwagę, że mimo
o b ie k t u s s a k a " ) ; (znaki końca wiersza, nowej linii, tabulacji), używa się do tego celu następuje wykaz parametrów metody (w tym przypadku brak), istnienia parametru w deklaracji metody nie podaje się go przy
) znaku \ (lewy ukośnik) w połączeniu z innym znakiem. Do zapisania a następnie jej treść. Nie określa się typu zwracanej wartości — jeśli wywołaniu. Można powiedzieć, że wywołanie metody za pomocą
p u b lic o v e r rid e s t r in g T o S t r in g O lewego ukośnika w łańcuchu wykorzystuje się podwójny lewy metoda ma zwrócić wartość, należy po prostu zastosować instrukcję konkretnego obiektu powoduje automatyczne „przekazanie" go
ukośnik (\\). r e t u r n w treści metody. w ramach pierwszego parametru metody.
3
Tablice in fo rm a ty c z n e . C # . W yd an ie II
Klasa Enumerable Do testów wykorzystujemy tablicę obiektów o dynamicznie
tworzonych właściwościach. Dzięki temu me musimy myśleć
KOMPONENTY GRAFICZNE
Klasa Enum erabl e wykorzystuje mechanizm metod
0 deklaracji klasy dla takich danych. Następnie w zapytaniu LINQ
rozszerzających w celu udostępnienia bogatego zbioru funkcji dla
Idas kolekcji. Dzięki tej klasie wszystkie kolekcje, które implementują
wykonujemy klasyczną operację na danych — projekcję, czyli wybór
W poniższym zestawieniu znajdują się najważniejsze właściwości
i metody wybranych komponentów wizualnych dostępnych
Button
Przycisk najczęściej wykorzystywany do zatwierdzenia wykonywanych
niektórych właściwości obiektów z kolekcji. na platformie .NET. Dziedziczą one po klasie C o n t r o l, dlatego
interfejs IE n u m e ra b l e, mogą korzystać z wymienionych wcześniej operacji.
v a r t a b l i c a = new [ ] { new { Im ię = na początku najlepiej jest omówić elementy tej klasy — jako
poniżej metod (i wielu innych). Opisane metody są bardzo
często wykorzystywane również w języku LINQ, który jest
" J a n " , N a z w isk o = " K o w a l s k i " ) , new { klasy bazowej. Właściwości klasy Button
Im ię = " A n d r z e j " , N a z w isk o = "Nowak" S y ste m .W i n do w s. F o rm s.
przedstawiony w kolejnej sekqi. Warto zwrócić uwagę, że mimo
dość skomplikowanych sygnatur stosowanie rozważanych metod jest }};
v a r ja n o w ie = fro m p i n t a b l i c a
Właściwości klasy Control F Ia t B u t t o n A p p e a r a n c e F I a tA p p e a r a n c e
znacznie prostsze. — precyzuje wygląd i zachowanie przycisku, jeśli właściwość
w h e re p . I m i e == „ J a n " b oo l A l 1 owD ro p — określa, czy kontrolka może wykonywać
b oo l A l 1 ( < T S o u r c e > ( t h i s F I a t Ś t y l e ma wartość F I a t.
s e l e c t p; operacje drag-and-drop ( t r u e — może, f a l se — nie może).
IE n u m e r a b le < T S o u rc e > s o u r c e , S y ste m .W i n do w s. F o rm s. F I a t S t y l e F I a t S t y l e
Powyższe zapytanie pozwala na wybór tylko obiektów spełniających S y s t e m . D raw i n g . C o lo r B a c k C o l o r — określa kolor
F u n c < T S o u r c e , b o o l> p r e d i c a t e ) — zwraca — określa sposób, w jaki jest rysowany przycisk (domyślnie
określone kryterium. Proszę zwrócić uwagę, że klauzula w here jest tla kontrolki, najczęściej wypełniającego dużą jej część (tlo przycisku,
t r u e , jeśli wszystkie elementy kolekcji spełniają podany warunek S ta n d a rd ).
umieszczona przed klauzulą s e l e c t — nie jest to przypadek. etykiety).
(predykat — funkcję logiczną), S y s t e m .W in d o w s .F o r m s .Im age Im age —
v a r t a b l i c a = new [] { new { Im ię = S y s t e m .D r a w i n g . R e c t a n g le C l i e n t R e c t a n g le
b oo l A n y < T S o u r c e > ( t h is określa obrazek, który jest wyświetlany na przycisku (właściwość
" J a n " , N a z w isk o = " K o w a l s k i " } , new { ! — zwraca rozmiar kontrolki bez dodatkowych, a koniecznych
IE n u m e r a b le < T S o u rc e > s o u r c e , F I a t S t y l e nie może mieć wartości System ).
Im ię = " A n d r z e j " , N a z w isk o = "Nowak" elementów, takich jak paski przewijania, paski menu, ramki itd.
F u n c < T S o u r c e , b o o l> p r e d i c a t e ) — zwraca S t r i ng T e x t (odziedziczona z klasy C o n t r o l) — określa
)); b oo l C o n t a i n s Fo c u s — określa, czy dany komponent
t r u e , jeśli którykolwiek z elementów kolekcji spełnia podany tekst wyświetlany na przycisku.
v a r p ie r w s z y = (fro m p i n t a b l i c a (bądź któreś z jego komponentów-dzieci) jest aktywny (fokusowany;
warunek (predykat — funkcję logiczną), s e le c t p ) . T a k e ( l) ; t r u e — tak, f a l se — nie). Metody klasy Button
d o u b le A v e r a g e ( t h i s IE n u m e r a b le < d o u b le > Wyniki zapytania mogą być traktowane jako obiekt interfejsu S y s t e m . Wi n d o w s. F o r m s . C o n te x t M e n u S tr i p v o i d P e rfo rm C l i c k () — generuje zdarzenie C l i c k
so u r c e ) — oblicza średnią arytmetyczną elementów kolekcji typu 1 Enu m erab l e, dzięki czemu nie ma problemu, aby wywołać C o n te x t M e n u S tr i p — określa menu kontekstowe, przypisane dla danego przycisku.
d o u b l e. Istnieją też wersje przeciążone dla typów i n t, i n t6 4, bezpośrednio jego metody. W powyższy sposób możemy pobrać do danej kontrolki. Zwraca n u l i , jeśli nie zostało dodane żadne
f 1 o a t, d ę c i m a i, a talie ich odmian nullowalnych. określoną liczbę początkowych elementów kolekcji, a dodając metodę menu. Zdarzenia klasy Button
IE n u m e r a b le < T S o u rc e > S k i p ( ) , możemy w bardzo łatwy sposób zasymulować mechanizm S y s t e m .W in d o w s .F o r m s .C o n t r o l[] C o n t r o ls e v e n t E v e n t H a n d le r D o u b l e c l i c k — zachodzi,
C o n c a t < T S o u r c e > ( t h is stronicowania: — określa listę kontrolek, które należą do danej kontrolki (kontrolek- gdy użytkownik kliknie dwukrotnie przycisk,
IE n u m e r a b le < T S o u rc e > f i r s t , v a r t a b l i c a = new [ ] { new { Im ię = dzieci).
IE n u m e ra b l e < T S o u rc e > se c o n d ) — łączy dwie " J a n " , N a z w isk o = " K o w a l s k i " ) , new { S yste m .W i n d o w s. F o r m s . D o c k S t y l e D ock — CheckBox
kolekcje w jedną. Im ię = " A n d r z e j " , N a z w isk o = "Nowak" określa sposób wypełniania komponentu-rodzica (np. formatki) Pole do zaznaczenia, zawierające opis tekstowy W jednej grupie
IE n u m e r a b le < T S o u rc e > przez kontrolkę. Domyślnie brak wypełnienia (rozmiar zgodny komponentów C h e c k B o x może być zaznaczonych więcej pól
));
D is t i n c t < T S o u r c e > ( t h i s v a r d r u g i = (fro m p i n t a b l i c a z właściwością S i z e kontrolki), niż jedno.
IE n u m e r a b le < T S o u rc e > s o u r c e ,
I E q u a l i ty C o m p a r e r < T S o u r c e > c o m p a re r)
s e le c t p ) . S k ip ( l ) . T a k e ( l ) ; b oo l E n a b le d — określa, czy użytkownik jest w stanie Właściwości klasy CheckBox
Sortowanie wyników jest możliwe za pomocą operatora orderby: korzystać z kontrolki (t ru e — tak, f a l s e — nie). Wyłączenie S y s t e m . Wi n do w s. Form s .A p p e a ra n c e — określa
— zwraca kolekcję, która zawiera elementy z oryginalnej kolekcji v a r t a b l i c a = new [] { new { Im ię = kontrolki nie jest równoważne z jej zniknięciem z formatki
z pominięciem duplikatów. Do porównywania elementów jest wygląd pola.
" J a n " , N a z w is k o = " K o w a l s k i " ) , new { b oo l In v o k e R e q u i re d — określa, czy inne wątki muszą b oo l A u to C h e c k — określa, czy pole automatycznie zmienia
wykorzystywany obiekt co m pa re r. Im ię = " A n d r z e j " , N a z w isk o = "Nowak" używać metody I nvo ke ( ) , aby móc w swoim działaniu korzystać stan zaznaczenia przy kliknięciu (t r u e — tak, f a l se — nie).
T S o u rce F i r s t O r D e fa u lt < T S o u r c e > (t h is z komponentu (t r u e — muszą, f a l s e — nie).
)); S y ste m .W i n do w s. F o rm s. C h e c k S t a t e
IE n u m e ra b l e < T S o u rc e > s o u r c e ) — zwraca pierwszy
v a r p o so rto w a n e = fro m p i n t a b l i c a S y s t e m . D raw i n g . P o i n t L o c a t io n — określa C h e c k S t a t e — zwraca stan, w jakim znajduje się pole.
element podanej kolekcji lub element domyślny (domyślna wartość
o r d e r b y p .Im ie umiejscowienie komponentu w odniesieniu do komponentu-rodzica. b oo l C h e cke d — zwraca stan, w jakim znajduje się pole
dla typów prymitywnych lub n ul 1 dla typów referencyinych),
d e s c e n d in g s e l e c t p ; S y ste m .W i n do w s. F o rm s . P a d d in g M a rgi n — ( t ru e , jeśli właściwość C h e c k S t a t e ma wartość C h e cke d
jeśli kolekcja jest pusta.
W ten sposób obiekty zostaną posortowane malejąco po imieniu. określa margines kontrolki — odstęp między nią a jej komponentem- lub In d e t e r m i n a te , f a l se jeśli U nchecked),
IO r d e re d E n u m e r a b le < T S o u r c e >
Przy okazji warto skorzystać z mechanizmu, który pozwala na nieco rodzicem. b oo l T h r e e S t a t e — określa, czy pole może przybierać trzy
O rd e rB y < T S o u rce , T K e y > (t h is
większą elastyczność niż w przypadku sztywnych klauzul języka LINQ. S yste m .W i n do w s. F o rm s . P a d d in g P a d d i ng — stany zaznaczenia (t r u e — tak, f a l se — nie). Nawet jeślita
IE n u m e r a b le < T S o u rc e > s o u r c e ,
Klauzule te bezpośrednio wykorzystują metody API kolekcji, które określa odstęp między granicami kontrolki a jej treścią (np. opisem właściwość ma wartość f a l se, pole może przybrać początkową
F u n c < T S o u r c e , T K e y > k e y S e l e c t o r ) — zwraca
można wywoływać samemu. Przepisanie powyższego przykładu przycisku). wartość In d e t e r m i n a te (niedostępną w trybie dwustanowym).
posortowaną kolekcję. Do sortowania są używane elementy typu
nieco zmieni efekt: S y s t e m . Wi n do w s. Form s . S i z e S i z e — określa
TKey. Elementy te są wybierane z obiektów kolekcji za pomocą
v a r t a b l i c a = new [] { new { Im ię = rozmiar kontrolki. Zdarzenia klasy CheckBox
funkcji k e y S e le c t o r . e v e n t E v e n t H a n d le r C h e cke d C h an ge d — zachodzi,
" J a n " , N a z w isk o = " K o w a l s k i " ) , new { S t r i ng T e x t — określa tekst, wyświetlany przez dany
IE n u m e r a b le < in t > R a n g e ( in t s t a r t , i n t n) gdy zmienia się wartość właściwości Ch ecked ,
Im ię = " A n d r z e j " , N a z w isk o = "Nowak" komponent (sposób wyświetlania zalety od komponentu),
— zwykła, statyczna metoda klasy Enum erabl e, która zwraca e v e n t E v e n t H a n d le r C h e c k S ta te C h a n g e d —
)); b oo l V i s i b l e — określa, czy komponent jest widoczny
kolekcję n liczb całkowitych od liczby s t a r t . zachodzi, gdy zmienia się wartość właściwości C h e c k S t a t e
v a r p o so rto w a n e = (fr o m p i n t a b l i c a (t r u e — tak, f a l se — nie).
IE n u m e r a b le < T S o u rc e > (także w momencie zmiany z wartości In d e t e r m i n a te na
s e le c t p ).
R e v e r s e < T S o u r c e > ( t h is
IE n u m e r a b le < T S o u rc e > s o u r c e ) — zwracakolekcję O r d e r B y D e s c e n d in g Metody klasy Contro! C h e c k e d — wtedy nie zachodzi zdarzenie CheckedChanged).
(x => x . I m ię ) ;
o odwróconej kolejności elementów w porównaniu do kolekcji
oryginalnej. W ten sposób można uzyskać identyczny efekt, co w poprzednim
S y s t e m .D r a w i n g .G r a p h i c s C r e a te G r a p h i c s () ComboBox
— tworzy obiekt klasy G ra p h i c s , dzięki któremu można Komponent łączący listę elementów i pole tekstowe.
IE n u m e r a b le < T R e s u lt > S e le c t < T S o u r c e , przykładzie, otrzymując pełnię możliwości wyrażeń lambda. Ponadto
wykonywać operacje graficzne na kontrolce.
T R e s u l t > ( t h i s IE n u m e r a b le < T S o u rc e > stosowanie łańcucha wywołań pokazuje kolejność wykonywanych
v o id D o D ra g D ro p O — rozpoczyna operację drag-and-drop. Właściwości klasy ComboBox
s o u r c e , F u n c < T S o u r c e , T R e s u lt > s e l e c t o r ) operacji. S yste m .W i n d o w s. F o rm s. A utoCom pl eteM ode
S y s t e m .W in d o w s .F o r m s .Form F in d F o r m ( ) —
— zwraca projekcję podanej kolekcji zgodnie z określonymi Nic nie stoi na przeszkodzie, aby projekcja (operacja s e l e c t ) AutoCom pl eteM ode — określa sposób uzupełniania tekstu
zwraca obiekt formatki, na której znajduje się kontrolka.
warunkami, tj. wybiera określony fragment każdego elementu (typu powodowała pobranie nie całych obiektów (tudzież ich pojedynczych wpisywanego w pole tekstowe.
S yste m .W i n do w s. F o rm s . C o n t r o l
T R e s u l t) i wstawia go do wynikowej kolekcji. właściwości), ale zupełnie nowych obiektów: S y s t e m . Wi n do w s. F o rm s. DrawMode DrawMode —
G e t C h i1d A tP o i n t (S y s t e m .D r a w i n g . P o i n t p)
IE n u m e r a b le < T S o u rc e > S k i p < T S o u r c e > ( t h i s v a r t a b l i c a = new [] { new { Im ię = określa sposób rysowania elementów rozwijanej listy.
— zwraca kontrolkę-dziecko znajdującą się w podanym punkcie,
IE n u m e r a b le < T S o u rc e > s o u r c e , i n t n) — " J a n " , N a z w isk o = " K o w a l s k i " ) , new { S y ste m .W i n do w s. F o rm s. C o m b o B o x S ty le
v o id R e f r e s h ( ) — odrysowuje kontrolkę na ekranie,
zwraca wszystkie elementy kolekcji oryginalnej, począwszy od tego Im ię = " A n d r z e j " , N a z w isk o = "Nowak" D ro p D o w n S ty l e — określa styl wyświetlania rozwijanej listy
v o id S e l e c t ( ) — uaktywnia kontrolkę.
o indeksie n. }}; (m.in. czy użytkownik może wprowadzić tekst do pola tekstowego).
v a r nowy = (fr o m p i n t a b l i c a
IE n u m e r a b le < T S o u rc e > T a k e < T S o u r c e > ( t h is
IE n u m e r a b le < T S o u rc e > s o u r c e , i n t n) — s e l e c t new { P se ud on im Zdarzenia klasy Contro! S yste m .W i n d o w s. F o rm s. O b j e c t C o l1e c t i on
Ite m s — określa elementy rozwijanej listy,
zwraca n elementów kolekcji, począwszy od pierwszego ze źródłowej = p .N a z w is k o + p .Im ie ) ) ; e v e n t E v e n t H a n d le r C l i c k — zachodzi w momencie i n t S e le c t e d ln d e x — określa numer zaznaczonego
kolekcp. Często wykorzystywana w połączeniu z metodą S k i p ( ) . W ten sposób uzyskuje się obiekt nowego, nieokreślonego typu, który kliknięcia myszą obszaru kontrolki. elementu z listy.
IE n u m e r a b le < T S o u rc e > W h e r e < T S o u r c e > ( t h is zawiera jedną właściwość — P seud on im , powstałą na skutek e v e n t D r a g E v e n tH a n d le r D ra gD ro p — zachodzi, O b je c t S e le c t e d lt e m — zwraca bądź ustawia zaznaczony
IE n u m e r a b le < T S o u rc e > s o u r c e , konkatenacji dwóch właściwości z oryginalnego elementu. gdy operacja drag-and-drop zostaje zakończona. element z rozwijanej listy (należący do właściwości I tems).
F u n c < T S o u r c e , b o o l> p r e d i c a t e ) — tworzy Nieco bardziej skomplikowaną operację stanowi grupowanie. e v e n t D ra g E v e n tH a n d l e r D ra g E n t e r — zachodzi, S t r i ng S e l e c t e d T e x t — zwraca bądź ustawia tekst
kolekcję złożoną z elementów oryginalnej kolekcp, dla których funkcja Grupowanie pozwala na podział oryginalnej kolekcji na pewną liczbę gdy kursor w trakcie operacji drag-and-drop znajdzie się w obszarze znajdujący się w polu tekstowym.
logiczna (predykat) zwraca wartość t rue. zbiorów, w których pewna cecha ma identyczną wartość: kontrolki.
v a r t a b l i c a = new [ ] { new { Im ię = e v e n t E v e n t H a n d le r D ra g L e a v e — zachodzi, Metody klasy ComboBox
i n t F i n d S t r i n g ( S t r i n g s ) — zwracaindeks
LINQ " J a n " , N a z w isk o = " K o w a l s k i " ) , new {
Im ię = " A n d r z e j" , N a z w isk o = "Nowak"
gdy kursor w trakcie operacji drag-and-drop opuszcza kontrolkę,
e v e n t D ra g E v e n tH a n d l e r D r a g O v e r — zachodzi pierwszego elementu rozwijanej listy, który zawiera łańcuch s
LINQ to specjalny składnik platformy NET, który umożliwia w trakcie przesuwania kursora w czasie operacji drag-and-drop (od początku elementu).
} , new { Im ię = 'J a n " , N a z w isk o =
tworzenie skomplikowanych zapytań umożliwiających wyrafinowany nad kontrolką.
dostęp do danych bezpośrednio w kodzie języka C# (i innych języków
"Nowak" } } ;
e v e n t E v e n t H a n d le r E n t e r — zachodzi w momencie
Zdarzenia klasy ComboBox
v a r z gru p o w a n e = (fr o m p i n t a b l i c a e v e n t D ra w Ite m E v e n t H a n d le r D ra w lte m —
dostępnych na platformie NET). Zapytania te przypominają nieco g ro u p p b y p .N a z w is k o aktywacji kontrolki.
zachodzi, gdy odrysowywana |est rozwijana lista, jeśli właściwość
język SQL, ale mogą być stosowane wobec różnych źródeł danych i n t o g s e l e c t new e v e n t G iv e F e e d b a c k E v e n t H a n d le r
DrawMode jest ustawiona na wartość inną niż N o rm a l.
(zwykłych kolekcji, dokumentów XML, ale również baz danych) itd. { N a z w isk o = g .K e y , G iv e F e e d b a c k — zachodzi w trakcie operacji drag-and-drop.
e v e n t E v e n t H a n d le r DropDown — zachodzi
Dużą rolę odgrywają też metody opisane w poprzedniej sekcji, które O so b y = g } ) ; e v e n t K e y E v e n t H a n d le r Key Down — zachodzi
w momencie rozwijania listy.
w praktyce gwarantują funkcjonalność podobną do języka SQL. Efektem operacji grupowania jest obiekt g, Obiekt ten reprezentuje w momencie naciśnięcia klawisza,
e v e n t E v e n t H a n d le r D ro p D o w n C lo se d — zachodzi
Najprostsze zapytanie LINQ składa się z kilku części: pojedynczą grupę (zbiór elementów z oryginalnej kolekcji o tej same| e v e n t K e y P r e s s E v e n t H a n d le r K e y P r e s s —
w momencie zwijania listy,
i n t [ ] t a b l i c a = new i n t [] { 3 , 4 , 5 } ; wartości pewnej cechy— w tym przypadku nazwiska). Korzystając zachodzi, gdy jest naciśnięty klawisz znakowy, tj. nieposiadający
e v e n t M e a s u r e lt e m E v e n tH a n d le r
v a r t e k s t y = fro m p i n t a b l i c a z właściwości Key, możemy ustalić to nazwisko, zaś sam obiekt specjalnego znaczenia (jak np. Enter, spacja, TAB),
M e a su re lte m — zachodzi przed odrysowywaniem listy,
s e le c t p .T o S t r in g O ; to po prostu kolekcp elementów o danym nazwisku. W klauzuli e v e n t K e y E v e n t H a n d le r Key Up — zachodzi
jeśli właściwość DrawMode jest ustawiona na wartość inną niż
Pogrubiony fragment powyższego kodu to zapytanie LINQ. s e l e c t nieco przekształcamy zgrupowany zbiór, aby łatwiej można w momencie zwolnienia klawisza.
N orm al.
Ze względu na długość i strukturę zapytania LINQ są zazwyczaj było go wykorzystywać w dalszej części kodu. e v e n t M o u se Ev en tH a n d l e r Mo u seDown — zachodzi,
gdy nad kontrolką zostanie wciśnięty przycisk myszy, e v e n t E v e n t H a n d le r S e le c t e d ln d e x C h a n g e d
zapisywane w kilku wierszach. Wyniki zapytania (na|częściej kolekcje Ostatnią operacją, którą omówimy, jest złączanie kolekcji (ang. join).
e v e n t E v e n t H a n d le r M ouseHover — zachodzi, — zachodzi w momencie zmiany zaznaczonego elementu.
danych) najłatwiej jest zapisać do zmiennej o nieokreślonym typie, v a r im io n a = n ew [] { new { ID = 1,
gdy kursor spoczywa nad kontrolką dłużej, raz określono we
ponieważ typy wyników zwracanych przez zapytania LINQ są często Im ię = " J a n " ) , new ( ID = 2 , Im ię =
" A n d r z e j" } } ; właściwości S y s te m ln fo r m a tio n .M o u s e H o v e r T im e .
ContextMenuStrip
skomplikowane i wydłużają kod, a nie wnoszą nic do funkcjonalności Rozwijane menu kontekstowe (dołączane do innych kontrolek).
v a r f in a n s e = n ew O ( new { ID = 1, e v e n t M o u se Ev en tH a n d l e r MouseMove — zachodzi,
wyników. Pierwszą część praktycznie wszystkich zapytań LINQ
stanowi część fro m X in Y, w której określamy kolekcję
Z a r o b k i = 5 0 0 0 .0 } , new { ID = 2 , gdy kursor porusza się nad kontrolką, Właściwości klasy
e v e n t M o u se Ev en tH a n d l e r MouseUp — zachodzi,
źródłową (Y) i alias pojedynczego elementu kolekcji, na którym są
Z a r o b k i = 7 0 0 0 .0 } } ;
gdy przycisk myszy zostaje zwolniony,
ContextMenuStrip
v a r zgru p o w a n e = (fr o m i i n im io n a S yste m .W i n d o w s. F o rm s.
wykonywane operacje (X). W powyższym przykładzie każda liczba e v e n t E v e n t H a n d le r Move — zachodzi w trakcie
j o i n f i n f in a n s e on T o o l S t r i p lte m C o l 1 e c t i on Ite m s — określa listę
z tablicy jest konwertowana do łańcucha znaków, który wchodzi i . I D e q u a ls f . I D przemieszczania kontrolki.
elementów tworzących menu kontekstowe.
w skład nowej kolekcji. s e l e c t new ( i . I m i ę , e v e n t P a in t E v e n t H a n d le r P a in t — zachodzi
S y s t e m .W in d o w s .F o rm s.
Zapytania LINQ są bardzo często wykonywane na bardziej złożonych f .Z a r o b k i } ) ; w momencie odrysowania kontrolki,
T o o l S t r i p L a y o u t S t y le L a y o u t S t y 1 e — określa
obiektach, np. pochodzących z bazy danych. Taką sytuację symuluje Kolekcje imiona i finanse reprezentują dwie kolekcje z bazy danych, e v e n t E v e n t H a n d le r R e s i z e — zachodzi w trakcie
zmiany rozmiarów kontrolki. sposób ułożenia pozycji menu kontekstowego.
poniższy przykład: które pozostają ze sobą w relacji jeden do jednego. To, co łączy obie S yste m .W i n do w s. F o rm s. T o o l S t r i pRenderM ode
kolekcje, to ID. Dzięki operacji złączenia jesteśmy w stanie połączyć RenderM ode — określa sposób rysowania menu kontekstowego,
v a r t a b l i c a = new [] { new ( Im ię
ze sobą identyfikatory obu kolekcji, a co za tym idzie — możemy Komponenty wizualne b o o l Show Im ageM argi n — określa, czy elementy menu
= " J a n " , N a z w isk o = " K o w a l s k i " ) ,
wstawić do jednego rekordu informację o imionach i zarobkach Poniższe zestawienie zawiera opis komponentów dziedziczących zawierają miejsce na obrazki (t r u e — tak, f a l se — nie).
new { Im ię = " A n d r z e j " , N a z w isk o =
poszczególnych pracowników. Gdyby w grę wchodziła relacja jeden po klasie C o n t r o ! . Wszystkie one należą do przestrzeni S y ste m .W i n do w s. F o r m s .C o n tr o !
"Nowak" } } ;
do wielu (pracownik mógłby na przykład dysponować wieloma nazw S y s t e m . Wi n do w s. Form s. W niektórych S o u r c e C o n t r o l — określa kontrolkę, której kliknięcie
v a r im io n a = fro m p i n t a b l i c a
pensjami), to zostałoby zwróconych wiele elementów, w których imię przypadkach jest zaznaczona informacja o dziedziczeniu danego spowodowało wyświetlenie menu kontekstowego.
s e le c t p .Im ie ;
byłoby to samo, a zarobki — różne. elementu klasy. Ciąg dalszy na str. 5
Tablice in fo rm a ty c z n e . C # . W yd an ie II
Metody klasy ContextMenuStrip S t r i ng Im a g e L o c a t i on — określa lokalizację, z której ma
być pobrany obrazek (za pomocą metod Load ( ) — synchronicznie
S yste m .W i n do w s. F o r m s .Tree N od e
S e l e cte d N o d e — określa aktualnie zaznaczoną gałąź.
Korzystanie w wątkach
v o id S h o w (S y s t e m .D r a w in g .P o in t p)
— wyświetla menu kontekstowe w danym punkcie. i Lo a d A sy n c ( ) — asynchronicznie). S yste m .W i n do w s. F o r m s .T ree N o d e TopNode z komponentów Ul
S yste m .W i n d o w s. F o rm s. P i c t u r e B o x S i zeMode — określa najwyżej znajdującą się w hierarchii i widoczną gałąź, Klasa B a c kgroundWo rke r może być z powodzeniem
wykorzystywana w większości operacji wymagających użycia wątków.
Zdarzenia klasy ContextMenuStrip Size M o d e — określa sposób wyświetlania obrazka w kontrolce S y s t e m . W ind o w s. F o rm s. T r e e V i e w N o d e S o rte r
Problem pojawia się, gdy zachodzi potrzeba skorzystania w metodzie
e v e n t E v e n t H a n d le r C lo s e d — zachodzi tuż (m.in. w sytuacji, gdy rozmiar obrazka jest różny od rozmiaru T r e e V i ew N o de So rt e r — określa obiekt sortujący drzewo.
kontrolki). wątku np. z komponentów graficznych. Są one tworzone w głównym
po zamknięciu menu kontekstowego.
e v e n t T o o l S t r i pD ro pD ow nC lo s i n gEv e n tH S y s t e m .D ra w in g . Im age I n i t i a l Im age — określa Metody klasy TreeView wątku aplikacji i z tego względu wątki poboczne nie ma|ą do nich
v o i d Co l 1 a p s e A l 1 ( ) — zwija wszystkie gałęzie dostępu Można jednak ominąć to zabezpieczenie, korzystając
a n d l e r C l o s i ng — zachodzi w trakcie zamykania menu obrazek, który będzie wyświetlany w trakcie ładowania się głównego
v o i d E xp a n d A l 1 () — rozwija wszystkie gałęzie. z implementowanego przez wszystkie kontrolki graficzne (pochodne
kontekstowego (można tę operację zablokować). obrazka.
S y s t e m .W in d o w s .F o r m s .Tree N od e klasy S yste m .W i n d o w s. F o rm s. C o n t r o l) interfejsu
e v e n t E v e n t H a n d le r Opened — zachodzi tuż b oo l Wa i 10 n Lo a d — określa, czy obrazek ma być ładowany
G e tN o de A t (P o i n t p) — zwraca gałąź znajdującą się I S y n c h r o n iz e ln v o k e .
po otwarciu menu kontekstowego. synchronicznie (tru e ), czy asynchronicznie ( f a 1 s e).
w danym punkcie (współrzędne punktu w odniesieniu do lewego
e v e n t C a n c e lE v e n t H a n d le r O p e n in g — zachodzi
Metody klasy PictureBox górnego rogu kontrolki). ISynchronizelnvoke
w momencie otwierania menu kontekstowego (można tę operację v o id Load ( ) — wczytuje obrazek synchronicznie. Właściwość v o id S o r t ( ) — sortuje drzewo za pomocą obiektu (System. ComponentModel)
zablokować). Wai tO n Lo a d musi mieć wartość tr u e , określonego we właściwości T r e e V i e w N o d e S o rte r. Najważniejszym elementem interfejsu jest metoda In v o k e () ;
v o id Lo a d A sy n c ( ) — wczytuje obrazek asynchronicznie. O b je c t In v o k e ( D e le g a t e delegacja,
DateTimePicker Właściwość Wai tO nLo a d musi mieć wartość f a l se. Zdarzenia klasy TreeView O b j e c t [ ] parametry)
Kontrolka umożliwiająca pobieranie i wybieranie daty za pomocą e v e n t T r e e V ie w E v e n t H a n d le r A f t e r C o l 1 a p se Metoda ta wywołuje asynchronicznie daną delegację wraz
wbudowanego kalendarza Zdarzenia klasy PictureBox — zdarzenie zachodzi po zwinięciu gałęzi. z parametrami. W delegacji należy podać metodę, która dokona
e v e n t A s y n c C o m p le te d E v e n tH a n d le r e v e n t T r e e V ie w E v e n t H a n d le r A ft e r E x p a n d zmian w kontrolkach (np. ustawi nową wartość etykiety tekstowej).
Właściwości klasy DateTimePicker LoadCompl e t ed — zachodzi, gdy skończy się ładowanie obrazka, — zdarzenie zachodzi po rozwinięciu gałęzi. Aby upewnić się, że dana kontrolka musi być zmieniona za pomocą
b oo l C h e cke d — określa, czy kalendarz wyświetla poprawną e v e n t P r o g r e s s C h a n g e d E v e n t H a n d le r e v e n t T r e e V ie w E v e n t H a n d le r A f t e r S e l e c t metody In v o k e , używa się właściwości In v o k e R e q u i red:
datę i czy jest włączony (możliwa jest zmiana daty; t ru e — tak, L o a d P r o g re s s C h a n g e d — zachodzi w trakcie procesu — zdarzenie zachodzi po zaznaczeniu gałęzi, b o o l In v o k e R e q u i re d — zwraca t r u e , jeśli do zmiany
f a l s e — nie). pobierania obrazka (tylko asynchronicznie). e v e n t T r e e V ie w E v e n t H a n d le r danego komponentu wymagana jest metoda I n vo k e ( ) , f a l se
S t r i ng Cu sto m F o rm at — umożliwia podanie własnego B e fo r e C o l 1 a p s e — zdarzenie zachodzi w przeciwnym razie.
formatu wyświetlania daty przy podaniu określonych znaczników ProgressBar przed zwinięciem gałęzi. Wątek można utworzyć w sposób klasyczny — za pomocą klasy
(jeśli właściwość Fo rm at ma wartość Custom). Komponent przedstawiający pasek postępu. e v e n t T r e e V ie w E v e n t H a n d le r B e fo re E x p a n d T h re a d . W konstruktorze obiektu tej klasy należy podać delegację,
S y ste m .W in d o w s. F o rm s . — zdarzenie zachodzi przed rozwinięciem gałęzi. jedną z możliwości jest delegacja T h r e a d S t a r t ( ).
D a t e T im e P ic k e r Fo rm a t Fo rm at — określa sposób Właściwości klasy ProgressBar e v e n t T r e e V ie w E v e n t H a n d le r B e f o r e S e le c t Konstruktor klasy T h re a d :
wyświetlania daty. i n t Maximum — określa maksymalną wartość, jaką może — zdarzenie zachodzi przed zaznaczeniem gałęzi. S y s t e m . T h r e a d in g . T h re a d T h r e a d (S y s te m .
b oo l ShowUpDown — określa, czy wyświetlane są przyciski osiągnąć pasek. e v e n t T re e N o d e M o u se C lic k E v e n t H a n d le r T h r e a d in g .T h re a d S t a rt T h r e a d S t a r t)
umożliwiające zmianę daty przy użyciu strzałek, a nie kalendarza i n t M in i mum — określa minimalną wartość, jaką może No d eMo u s e C 1 i c k — zachodzi w momencie kliknięcia gałęzi. — tworzy obiekt wątku, który wywoła metodę zawartą
( t r u e — tak, f a l s e — nie). osiągnąć pasek. w delegacji T h r e a d S t a r t .
D a t e T i me V a lu e — zwraca datę wybraną za pomocą i n t S te p — określa wartość, o jaką ma zwiększać się postęp Okna dialogowe Przykład:
przy wykonywaniu metody P e r fo rm S t e p ( ) . Okna dialogowe mają różny wygląd i działanie. Dzięld nim złożone
kalendarza.
i n t V a lu e — określa osiągniętą wartość postępu. operacje, takie jak np. wybór pliku z dysku, sprowadzają się Program wyświetla w etykiecie tekstowej klasy L a b e l
Label Metody klasy ProgressBar do wywołania jednej metody. Jednym z najprostszych rodzajów (obiekt l a b e l ) aktualny czas.
p r i v a t e T h re a d w a te k ;
Etykieta tekstowa; może wyświetlać również grafikę. okien dialogowych jest okno wyświetlające wiadomość
v o id In c r e m e n t ( i n t w a r t o ś ć ) — zwiększawartość p r i v a t e b oo l w a t e k M a D z ia la c = t r u e ;
— M essageB ox.
Właściwości klasy Label postępu o podaną wartość. p r i v a t e d e le g a t e v o id
b oo l A u t o S iz e — określa, czy wymiary etykiety będą v o id P e r fo rm S t e p ( ) — zwiększa wartość postępu MessageBox D e le g a c ja (S t r in g w a rto s c );
o wartość właściwości S te p . Okno dialogowe umożliwiające zaakceptowanie lub odrzucenie p r i v a t e v o id F o r m l_ L o a d ( o b je c t
dostosowywane do wyświetlanego tekstu (t r u e — tak,
propozycji; posiada bardzo dużo możliwości wyświetlania. s e n d e r , E v e n t A r g s e)
f a l s e — nie).
S yste m .W i n do w s. F o r m s . B o r d e r S t y l e
RadioButton Do wyświetlenia okienka wykorzystuje się metodę S how ( ) (
Pole do zaznaczenia, zawierające opis tekstowy. W jednej grupie A p p l i c a t i o n . A p p l i c a t i o n E x i t +=
B o r d e r S t y l e — określa rodzaj obramowania etykiety. (ma ona 21 wariantów):
komponentów R a d io B u t to n może być zaznaczone tylko new E v e n t H a n d le r ( A p p lic a t io n _
S y s t e m . D r a w in g . Im age Im age — określa obrazek S yste m .W i n d o w s. F o rm s. Di a l o g R e s u lt
jedno pole. A p p li c a t i o n E x i t ) ;
wyświetlany w etykiecie (jako tlo dla napisu). M e s s a g e B o x .S h o w ( S t r in g t y t u ł ,
w a te k = new T h re a d (n e w
S y s t e m . D raw i n g . S i z e Maxi mumSi z e (odziedziczona Właściwości klasy RadioButton S t r i n g o p i s , S y s t e m .W in d o w s .F o rm s.
T h r e a d S t a r t (M e t o d a W a t k u ));
z klasy C o n t r o l) — określa maksymalny rozmiar pola, w którym S yste m .W i n d o w s. F o rm s .A p p e a ra n c e M e ssa g e B o x B u tto n s p r z y c i s k i , S y ste m .
w a t e k .S t a r t ( ) ;
jest wyświetlana etykieta. Umożliwia to kontrolę nad sposobem A p p e a ra n c e — określa wygląd pola (podobnie jak w przypadku Wi n d o w s. F o r m s .M e s s a g e B o x Ic o n i ko n a)
M e ssa g e B o x B u tto n s i M e ssage B ox Ic o n są typami }
wyświetlania tekstu (np. w ilu linijkach zostanie wyświetlony tekst). komponentu Ch eckB ox). p r i v a t e v o id U s t a w E t y k i e t e ( S t r i n g
Właściwość ta ma pierwszeństwo przed właściwością A u t o S iz e . b oo l C h e cke d — określa, czy pole jest zaznaczone wyliczeniowymi; udostępniają wszystkie znane konfiguracje w a rto sc)
S t r i n g T e x t — określa tekst etykiety. (t r u e — tak, f a l se — nie). przycisków i Ikon.
{
S y s t e m .D r a w i n g .C o n t e n t A l ig n m e n t T e x t A l i gn Typ wyliczeniowy Di a l o g R e s u l t posiada wartości la b e l.T e x t = w a rto sc;
— określa wyrównanie tekstu etykiety. Zdarzenia klasy RadioButton dla wszystkich przycisków, jakie mogą pojawić się w okienku;
}
e v e n t E v e n t H a n d le r C h e c k e d C h a n g e d — zachodzi, w zwracanej przez metodę wartości jest określony wybrany p r i v a t e v o id M etod aW atku()
ListBox gdy nastąpi zmiana stanu pola. przez użytkownika przycisk.
{
Wybieralna lista elementów. w h ile (w a te k M a D z ia la c )
RichTextBox OpenFileDialog
{
Właściwości klasy ListBox Pole tekstowe o najbardziej rozbudowanych możliwościach spośród Bardzo ważną grupę okien dialogowych stanowią standardowe okna
S t r i n g t e k s t = D a te T im e .U tcN o w .
i n t C o l umnWidth — określa szerokość kolumn w trybie wszystkich kontrolek systemu Windows. systemu Windows służące do wykonywania określonych czynności.
T o S t r in g O ;
wielokolumnowym. Klasa O p enFi 1 e D i a l og udostępnia okno wyboru pliku.
i f (la b e l.In v o k e R e q u ire d )
b oo l H o r i z o n t a l S c r o l 1 b a r — określa, czy Właściwości klasy RichTextBox
(jeśli jest to konieczne) jest wyświetlany poziomy pasek przewijania b o o l A u to W o r d S e le c t io n — określa, czy możliwe jest Właściwości klasy OpenFileDialog {
b o o l C h e c k F i 1 e E x i s t s — określa, czy w przypadku D e le g a t e d e l e g a c j a = new
(t r u e — tak, f a l s e — nie). zaznaczenie tylko całych wyrazów (t r u e — tak, f a l se — nie),
wprowadzenia nazwy nieistniejącego pliku zostanie wyświetlone D e le g a c ja ( u s t a w E t y k i e t e ) ;
b oo l S c r o l l A l w a y sV i s i b l e — określa, czy pasek (paski) b oo l D e t e c t s U r l s — określa, czy adresy URL mają być
ostrzeżenie (t ru e — tak, f a l s e — nie). l a b e l . I n v o k e ( d e l e g a c j a , new
automatycznie zamieniane na odnośniki
przewijania są zawsze widoczne (t r u e — tak, f a l se — nie), S t r i n g F i l eName (odziedziczona po klasie F i 1 e D i a l og) o b j e c t [] { t e k s t } ) ;
S t r i n g R t f — zwraca zawartość pola tekstowego w formacie RTF
b o o l Mul t i C o l umn — włącza lub wyłącza tryb — zwraca nazwę wybranego pliku. }
S t r i n g S e 1 e c t e d R t f — zwraca aktualnie zaznaczony tekst
wielokolumnowy listy. W tym trybie elementy listy są wyświetlane S t r i ng [] F i l eNames (odziedziczona po klasie e l se
w formacie RTF.
w taki sposób, aby nie aktywować pionowego paska przewijania F i 1 eDi a l og) — zwraca nazwy wybranych plików (jeśli U s t a w E t y k ie t e (t e k s t );
S y s t e m .D r a w i n g . F o n t S e l e c t i o n F o n t
(po maksymalnym wypełnieniu pierwszej kolumny elementy właściwość Mul t i S e l e c t ma wartość tru e ). T h r e a d . S le e p ( lO O O ) ;
— umożliwia zmianę czcionki dla zaznaczonego fragmentu. Zmieniając
dodawane są do kolumn następnych). S t r i ng F i 1 t e r (odziedziczona po klasie F i l eDi a l og) 1
tę właściwość w sytuacji, gdy jest zaznaczony fragment tekstu,
S y s t e m .W in d o w s .F o rm s. — określa rodzaje filtrów, według których wyświetlane są jedynie pliki }
umożliwia się zmianę formatowania (podobnie jak inne właściwości
S e le c t e d O b je c t C o l 1 e c t i on S e le c t e d lt e m s o danym rozszerzeniu. p r i v a t e v o id A p p l i c a t io n _
ma|ące w nazwie słowo S e l e c t i on).
— zwraca wszystkie zaznaczone elementy listy, jeśli właściwość A p p lic a t io n E x it ( o b je c t s e n d e r,
S t r i n g T e x t — zwraca zawartość pola tekstowego, b oo l Mul t i S e l e c t — określa, czy jest możliwy wybór wielu
S e l e c t i onMode ma wartość Mul t i S im p l e E v e n t A r g s e)
b oo l W ordwrap — określa, czy tekst w kontrolce jest zawijany plików (t r u e — tak, f a 1 s e — nie).
lub M u lt i E xte n d e d . {
( t r u e — tak, f a l s e — nie).
S yste m .W i n d o w s. F o rm s . S e l e c t i onMode f 1 o a t Z o o m F a c to r — określa stopień powiększenia tekstu Metody klasy OpenFileDialog w a t e k M a D z ia la c = f a l s e ;
S e l e c t i onMode — określa sposób, w jaki użytkownik może S yste m .W i n do w s. F o r m s .D i a l o g R e s u lt 1
(większy od 1 — tekst zostaje powiększony; mniejszy od 1 — tekst
wybrać element(y) listy. zostaje pomniejszony). ShowDi a lo g ( ) (odziedziczona po klasie CommonDi a l og) W momencie załadowania formatki jest tworzony i uruchamiany
— wyświetla okienko dialogowe I zwraca rodza| wybranego wątek. Ustawiana jest również metoda obsługi zamknięcia aplikacji.
Metody klasy ListBox Metody klasy RichTextBox przycisku. Wynika to z faktu, iż aplikacja systemu Windows zostaje zamknięta
v o id C l e a r S e l e c t e d ( ) — usuwazaznaczenie v o id L o a d F i l e f s t r i n g n azw a , S y ste m . dopiero wtedy, gdy wszystkie wątki przez nią utworzone są
ze wszystkich zaznaczonych elementów listy, W ind o w s. F o rm s. R i c h T e x tB o x S tr e a m T y p e t y p ) PrintDialog zamknięte. Jako Iż metoda wątku działa non stop, musi zostać
b oo l G e t S e l e c t e d ( i n t i n d e x ) — zwracatr u e , — wczytuje tekst z pliku, uwzględniając podany typ dokumentu Ten rodza| okna dialogowego jest wyświetlany przed rozpoczęciem
zatrzymana w specjalny sposób (przez zmianę wartości zmiennej
jeśli element o danym indeksie jest zaznaczony (istnieje możliwość wyboru między czystym tekstem a odmianami drukowania dokumentów.
w atekM aD zi a l ac). W ten sposób wątek kończy swe działanie
( f a l se w przeciwnym razie), formatu RTF).
v o id S e t S e l e c t e d ( i n t in d e x , bool i n t G e t L in e F r o m C h a r In d e x ( in t in d e x )
Właściwości klasy PrintDialog i aplikacja może zostać zamknięta. W metodzie MetodaWat ku ()
S y s t e m . D raw i n g . P r i n t i n g . P r i n tD ocum ent pobieramy aktualny czas, a następnie tworzymy delegację. Następnie
w a r t o ś ć ) — ustawia zaznaczenie danego elementu — zwraca numer linii, w której znajduje się znak o podanym indeksie, wywołujemy metodę I nvoke ( ) , uwzględniając parametr, jakim
Docum ent — określa dokument przeznaczony do drukowania.
na określoną wartość. v o id S a v e F i 1 e ( S t r i n g n azw a , S y ste m . jest łańcuch z aktualnym czasem. Metoda U sta w E ty k i e te ()
S y ste m .W in d o w s. F o rm s. P r i n t e r S e t t i n gs
Wi n do w s. F o r m s . R i c h T e x tB o x S tr e a m T y p e t y p ) jest odpowiedzialna tylko za zmianę tekstu etykiety — jej nagłówek
MenuStrip — zapisuje zawartość pola tekstowego do pliku, uwzględniając podany
P r in t e r S e t t i n g s — określa ustawienia drukarki, jakie
zostaną wykorzystane do drukowania.
musi być zgodny z typem delegacji.
Menu systemowe aplikacji widoczne na górze formatki. typ (jak w przypadku metody Load F i 1 e ( ) ).
5
Tablice in fo rm a ty c z n e . C # . W yd an ie II
Klasa G r a p h ic s udostępnia wiele metod służących do rysowania; S t r i n g [ ] G e t F i l e s ( S t r i n g ś c i e ż k a ) — pobiera b oo l CanW ri t e — określa, czy strumień ma możliwość S tre a m R e a d e r s t ru m ie ń = F i l e .
poniżej wyszczególniono niektóre z nich: wszystkie pliki z danego katalogu (nie z jego podkatalogów!). zapisywania danych (t r u e — tak, f a l se — nie), O p e n T e x t ( s c ie z k a );
v o id D ra w E ll ip s e ( P e n p io r o , R e c t a n g le S t r i ng [] G e tF i 1 e S y s t e m E n tr i e s ( S t r i ng lo n g L e n g th — określa długość strumienia. in t i = 0;
p r o s t o k ą t ) — rysuje elipsę ograniczoną przez dany prostokąt ś c i e ż k a , S t r i n g w z o r z e c ) — zwraca wszystkie nazwy 1 ong P o s it i o n — określa aktualną pozycję w strumieniu, S t r i n g Q b u f o r = new S t r i n g [ 5 ] ;
przy użyciu określonego rodzaju pióra plików i katalogów z danego katalogu pasujące do określonego wzorca. i n t ReadT i m eout — określa maksymalny czas, przez jaki w h ile ( i < 5 && ¡ s t r u m ie ń .
v o id D ra w lin a g e (Im a g e o b r a z , P o in t p) D a te T im e G e t L a s t A c c e s s T im e ( S t r in g strumień będzie probowal czytać dane ze strumienia, E n d O fS tre a m )
— rysuje obraz w danym punkcie. ś c i e ż k a ) — zwraca czas ostatniego dostępu do danego katalogu. i n t W ri t e T i meout — określa maksymalny czas, przez jaki {
v o id D ra w L in e (P e n p io r o , P o in t p l , P o in t D a te T im e G e t L a s t W r it e T im e f S t r i n g strumień będzie próbował zapisać dane do strumienia. b u f o r [ i ] = s t ru m i e n . R e a d L i n e ( ) ;
p 2) — rysuje linię prostą między dwoma punktami przy użyciu ś c i e ż k a ) — zwraca czas ostatniego zapisu do danego katalogu. i += 1 ;
określonego rodzaju piorą. S t r i ng [] G e t l _ o g i c a l D r i v e s ( ) — zwraca wszystkie Metody klasy Stream }
v o id C l o s e ( ) — zamyka strumień i zwalnia jego zasoby,
v o id D ra w P o ly g o n (P e n p io r o , P o i n t [] dyski logiczne lokalnego komputera s t r u m ie ń .C lo s e ( ) ;
p u n k t y ) — rysu|e wielokąt zlozony z punktów o podanych v o id M o v e (S t r in g z r o d l o , S t r i n g c e l ) — v o id F I us h ( ) — przesyła całą aktualną zawartość
S t r i n g Q w y n ik = new S t r i ng [ i ] ;
współrzędnych przy użyciu określonego rodzaju pióra, przenosi katalog źródłowy do katalogu docelowego wraz z podkatalogi wewnętrznego bufora strumienia do docelowego obiektu,
A r r a y .C o p y ( b u f o r , w y n ik , i ) ;
v o id D ra w R e c t a n g le (P e n p io r o , R e c t a n g le i plikami. Katalog docelowy nie może wcześniej istnieć (w przeciwnym in t R e a d (b y te [] b u fo r, in t o f f s e t , in t
r e t u r n w y n ik ;
razie zostanie wygenerowany wyjątek klasy IO E x c e p t i on), i l o s c ) — zwraca ilość odczytanych danych. Są one umieszczane
p r o s t o k ą t ) — korzystając z podanej struktury, rysuje prostokąt )
przy użyciu określonego rodzaju pióra, v o id S e t L a s t A c c e s s T i m e ( S t r i n g ś c i e ż k a , w danej tablicy, począwszy od elementu o indeksie o f f s e t .
v o id D r a w S t r i n g ( S t r i n g t e k s t , F o n t D a te T im e d a t a ) — zmieniaczas ostatniego dostępu do Maksymalna ilość odczytanych bajtów to i 1 o sc. Zwrócony wynik W powyższych metodach najbardziej skomplikowana jest obsługa
c z c i o n k a , Pen p io r o , P o in t F p u n k t) danego katalogu. nie musi być równy parametrowi i l o s c . sytuacji, gdy plik nie ma określonych przez program 1024 bajtów
v o id S e t L a s t W r i t e T im e ( S t r i n g ś c i e ż k a , i n t R e a d B y t e ( ) — wczytuje i zwraca jeden bajt. Jeśli wystąpi lub 5 linii tekstu. Dzięki użyciu pomocniczych tablic b u f o r i metody
— wypisuje w podanym punkcie tekst.
Niektóre z powyższych metod posiadają odpowiedniki rysujące D a te T im e d a t a ) — zmienia czas ostatniego zapisu do danego błąd (dowolnego rodzaju), zwracana jest wartość - I (dlatego zwracana A r r a y . Co p y () można jednak szybko tę sytuację rozwiązać.
odpowiednie figury z wypełnieniem (zamiast klasy Pen używa się katalogu. jest wartość typu in t j.
klasy B ru sh ), np: lo n g S e e k ( lo n g o f f s e t , S e e k O r ig in XML (model DOM) w C#
v o id F i l l E l l i p s e ( B r u s h p e d z e l , R e c t a n g le File p u n k t_ o d n i e s i en i a ) — przesuwa wskaźnik pozycji Klasy i interfejsy do obsługi języka XML znajdują się w przestrzeni
Klasa służy do uzyskiwania informacji o plikach. Umożliwia także w strumieniu o wartość o f f s e t , uwzględniając dany p u n k t_ nazw S y ste m .X m l Podstawową klasą jest klasa
p r o s t o k ą t ) — rysuje przy użyciu określonego rodzaju pióra
ich tworzenie, edycję oraz usuwanie. Dostęp do plików przy użyciu o d n ie s ie n ia . Xml Docum ent. Za pomocą tej klasy można załadować dokument
elipsę z wypełnieniem ograniczoną przez dany prostokąt.
strumieni jest omawiany w dalszej części tablicy W poniższym v o id W r i t e ( b y t e [ ] b u f o r , i n t o f f s e t , i n t XML z pliku, strumienia lub przy użyciu wyspecjalizowanych klas-
W powyższych deklaracjach są używane klasy B ru sh , Fo nt,
Pen, które określają sposób rysowania określonych kształtów zestawieniu nie są ujęte metody pobierające czasy ostatniego dostępu, i 1 o sc ) — zapisuje do strumienia i 1 o s c bajtów z danej tablicy, czytników (klasa Xml R e a d e r i jej pochodne).
i napisów. Klasa B ru sh określa sposób rysowania figur wypełnionych ostatniego zapisu do pliku, gdyż ich składnia jest identyczna ze składnią począwszy od elementu o indeksie o f f s e t , Po utworzeniu obiektu dokumentu (konstruktor domyślny) należy
(me jest ona wykorzystywana bezpośrednio; korzysta się z jej Idas odpowiednich metod dotyczących katalogów, v o id Wri t e B y t e ( b y t e b ) — zapisuje bajt do strumienia. wywołać jego metodę Load ( ) , aby wczytać dane:
v o id C o p y ( S t r i n g z r o d l o , S t r i n g c e l , Jednym z najpopularniejszych przykładów użycia strumieni jest v o id L o a d ( S t r in g l o k a l i z a c j a ) — wczytuje
pochodnych), a Pen niewypełnionych. Klasa F o nt odpowiada
b oo l n a d p is y w a n ie ) — kopiuje plik pomiędzy określonymi modyfikowanie plików. W poprzednim podrozdziale zostały dokument XML z podanego adresu (zarowno lokalnego,
za określenie rodzaiu czcionki (m.in. kro|u i rozmiaru). Sposób ich
wykorzystania jest zaprezentowany w poniższym przykładzie. lokalizacjami. Jeśli argument n a d p is y w a n i e ma wartość tr u e , opisane operacje na systemie plików. Klasa F i l e udostępnia wiele jak i sieciowego).
plik znajdujący się w ścieżce c e 1 zostanie nadpisany interesujących metod, które wykorzystują strumienie, a pozwalają na Aby uzyskać dostęp do głównego elementu dokumentu (tzw. korzenia),
Przykład: v o id D e l e t e ( S t r i n g ś c i e ż k a ) — usuwa podany plik. zmianę zawartości plików trzeba wykorzystać właściwość D ocum entEl ement:
Program narysuje na formatce quasi-domek. v o id D e c ry p t ( S t r i n g ś c i e ż k a ) — odszyfrowuje plik Xml E le m e n t D ocum entEl e m en t— określa element
p r i v a t e v o id F o r m l_ P a in t ( o b j e c t zaszyfrowany przy użyciu metody E n c r y p t ( ) . File (ciąg dalszy) korzenia w danym dokumencie XML
s e n d e r , P a in t E v e n t A r g s e) v o id E n c r y p t ( S t r i n g ś c i e ż k a ) — szyfruje plik. S tr e a m W r ite r A p p e n d T e x t ( S t r in g ś c i e ż k a )
Klasa Xml E l emen t (podobnie jak Xml Docum ent) dziedziczy
Tylko użytkownik, który zaszyfrował plik, może go odszyfrować. — otwiera podany plik do dopisywania w trybie tekstowym (UTF-8)
{ po klasie Xml Node, która jest klasą bazową dla obiektów
G r a p h ic s g = e .G r a p h i c s ; Dwie powyższe metody dotyczą tylko systemów Windows NT i zwraca strumień obsługujący ten plik.
reprezentujących elementy języka XML.
i późniejszych, obsługujących system plików NTFS. F ile S t r e a m C r e a t e ( S t r i n g ś c i e ż k a ) — tworzy
P o i n t [] p u n k ty D a c h = new P o i n t []
{ new P o i n t (1 0 0 , 0 ) , new P o in t F ile A t t r ib u t e s G e t A t t r ib u t e s ( S t r in g plik znajdujący się w podanej ścieżce i zwraca strumień obsługujący XmlNode
ś c i e ż k a ) — zwraca atrybuty dla podanego pliku, ten plik w trybie binarnym. Klasa reprezentuje pojedynczy element dokumentu XML.
( 0 , 7 5 ) , new P o i n t (2 0 0 , 7 5) } ;
v o id M o v e (S t r in g z r o d l o , S t r i n g c e l ) S tr e a m W r ite r C r e a t e T e x t ( S t r i n g ś c i e ż k a )
R e c t a n g le dom = new R e c t a n g le ( 2 5 ,
7 5 , 1 5 0 , 1 0 0 ); — przenosi plik między podanymi ścieżkami. — tworzy plik znajdujący się w podanej ścieżce i zwraca strumień Właściwości klasy XmlNode
v o id R e p l a c e ( S t r i n g z r o d l o , S t r i n g c e l , obsługujący ten plik w trybie tekstowym Xml A t t r i b u t e C o l l e c t i o n A t t r i b u t e s — określa
R e c t a n g le o kn o = new R e c t a n g le (7 5 ,
S t r i n g k o p ia c e lu ) — przenosi plik między ścieżkami F ile S t r e a m O p e n R e a d ( S t r i n g ś c i e ż k a ) atrybuty elementu.
25, 45, 4 5 );
z r o d l o a c e l .Oryginalna zawartość pliku c e l zostaje zapisana — otwiera podany plik do odczytu i zwraca strumień obsługujący Xml N o d e Li s t C h i 1 dNodes — określa wszystkie elementy
P o in t F p u n k t N a p is u = new
wścieżce ko p i a c e l u. ten plik w trybie binarnym. należące do danego elementu.
P o i n t F ( 7 0 . 0 F , 8 0 . O F );
v o id S e t A t t r i b u t e s ( S t r i n g ś c i e ż k a , S tre a m R e a d e r 0 p e n T e x t ( S t r i n g ś c i e ż k a ) S t r i n g Name — określa nazwę elementu.
B ru sh c z e r w o n y P e ln y = new
F i 1 e A t t r i b u t e s a t r y b u t y ) — ustawia określone — otwiera podany plik do odczytu i zwraca strumień obsługujący Xml N odeType N odeType — określa typ elementu.
S o l i d B r u s h (C o l o r . R e d ) ; ten plik w trybie tekstowym.
atrybuty dla podanego pliku. S t r i ng V a l ue — określa wartość elementu.
B ru sh c z a r n y P e ln y = new F ile S t r e a m O p e n W rite ( S t r i n g ś c i e ż k a )
S o lid B r u s h (C o lo r .B 1 a c k ); Przykład: — otwiera podany plik do zapisu i zwraca strumień obsługujący Metody klasy XmlNode
B ru sh n ie b i e s k o B i a l y = new Metoda zwraca w postaci tablicy obiektów klasy S t r i n g listę ten plik w trybie binarnym. Xm lNode In s e r t A f t e r ( X m lN o d e now y,
S y s t e m .D r a w i n g . D raw i n g2 D . wszystkich podkatalogów i plików dla danego katalogu. Do opisu S t r i n g Q ReadA l 1 L i n e s ( S t r i n g ś c i e ż k a ) Xm lNode p u n k t O d n ie s ie n ia ) — zwracanowo
L in e a r G r a d ie n t B r u s h (d o m , C o l o r . katalogu dodana jest liczba zawartych w nim plików, a do opisu pliku — wczytuje podany plik w trybie tekstowym i umieszcza jego dodany element XML, który jest wstawiany za elementem
B lu e , C o lo r .W h it e , 1 8 0 ); — określające go atrybuty. zawartość w tablicy łańcuchów (|edna linijka tekstu — jeden łańcuch), p u n k t O d n ie s ie n ia .
B ru sh b ia l y P e l n y = new p r i v a t e S t r i n g Q m etoda ( S t r i n g po czym zamyka plik. Xm lNode R e m o ve C h ild (X m lN o d e e le m e n t)
S o l i d B r u s h (C o lo r .W h i t e ) ; s c i e zka ) v o id W r i t e A l l L i n e s ( S t r i n g ś c i e ż k a , — zwraca usunięty element.
g . F i l l P o ly g o n (c z e r w o n y P e ln y , S t r i n g Q z a w a r t o ś ć ) — zapisuje podaną tablicę łańcuchów
ł Xm lNode R e p la c e C h ild (X m lN o d e now y,
p u n k ty _ d a c h ); S t r i n g Q p l i k i = D ir e c t o r y . do pliku w trybie tekstowym (|eden łańcuch — jedna linijka tekstu). Xm lNode s t a r y ) — zwraca stary element, który uprzednio
g . F i l l R e c t a n g l e ( c z a r n y P e l n y , d o m ); G e t F ile s ( s c ie z k a ) ; W nagłowiach powyższych metod znajdują się odwołania do został zamieniony na nowy.
g . F i 11 E l 1 i p s e ( n i e b i e s k o B i a ly , o k n o ) ; S t r i n g Q k a t a l o g i = D ir e c t o r y . trzech klas strumieni: F i 1 e S t r e am, S t r e am Re a d e r
g . D r a w S t r i n g C 'W i t a j ! 11, new G e t D ir e c t o r ie s (s c ie z k a ); i S tr e a m W r ite r . Pierwsza śluzy do obsługi pliku w trybie Przykład:
F o n t ( " C o u r i e r " , 1 2 . O F ), i n t i lo s e = p l i k i . L e n g th + binarnym, dwie pozostałe do obsługi pliku w trybie tekstowym. Program wyświetla wartości elementu imię z podanego
b ia ł y p e łn y , p un kt n a p is u ); k a t a lo g i.L e n g th ; Różnica między tymi typami plików polega na tym, ze plik binarny dokumentu XML:
1 S t r i ng [] w y n ik i = new jest sekwenqą bajtów, natomiast plik tekstowy — sekwencją linii dokumenUml
S t r in g Q lo s c ] ; (łańcuchów przedzielanych znakami nowej linii— w systemie <?xm l v e r s io n = " 1 .0 " ? >
W pierwszej części kodu określamy kształty, jakie będą mieć Windows znaki nowe| linii to znaki o kodach 13 i 10).
in t l ic z n ik = 0; < o so b y >
poszczególne elementy „domu”. Następnie tworzymy obiekty pędzli,
f o r e a c h ( S t r i n g nazwa in k a t a l o g i ) Jeśli jest dostępny strumień F i 1 e S t ream, a istnieje konieczność < o so b a >
po czym przystępujemy do rysowania. Ważne jest, aby umieścić ten użycia któregoś z pozostałych dwu strumieni, można wykorzystać
kod w zdarzeniu P a i n t formatki (tudzież innego komponentu { < im ie > J a n < / im ie >
w y n i k i [1 i c z n i k ] = n a z w a + "; I l o s c ich konstruktory: < n a z w is k o > K o w a ls k i< / n a z w i sk o >
graficznego), aby było ono odrysowywane za każdym razem S tre a m R e a d e r r e a d e r = new S tre a m R e a d e r
p lik ó w : " + D ir e c t o r y . < / o so b a >
(a nie tylko tuz po uruchomieniu). ( o b ie k t K la s y F ile S t r e a m ) ;
G e t F i l e s ( n a z w a ) .L e n g t h ; < o so b a >
S t r e a m W r it e r w r i t e r = new S tr e a m W r ite r
Korzystanie z systemu plików l i c z n i k += 1;
(o b i e k t K l a s y F i 1 e S t r e a m ) ;
< i mi e > A n d r z e j< / i mi e>
< n a zw i sk o > N o w a k< /n a zw i sk o >
Przestrzeń"nazw S y s t e m . 10 udostępnia cztery klasy związane 1
fo r e a c h ( S t r i n g nazwa in p l i k i ) Do obsługi plików binarnych przestrzeń nazw S y s te m . 10 < / o so b a >
z przeglądaniem katalogów i uzyskiwaniem informacji o plikach. Są to oferuje również klasy B i n a r y R e a d e r i B i n a ry W ri t e r .
klasy Di r e c t o r y , Di r e c t o r y l n f o I F i 1 e, F i 1 e ln f o . { < /o s o b y >
w y n ik i [ l i c z n i k ] = nazwa Udostępniają one szereg wariantów metody, odpowiednio: Read ()
Klasy Di r e c t o r y i Di r e c t o r y l n f o różnią się tylko tym, Kod programu:
+ 11; A t r y b u t y : 11 + F i l e . i Wr i t e ( ) ; dzięki nim możliwy jest odczyt i zapis zmiennych
iż klasa Di r e c t o r y całą swą funkcjonalność opiera na metodach p r i v a t e v o id M etodaXM L()
G e t A t t r i b u t e s (n a zw a ) . T o S t r i n g O ; takich typów, jak b o o l, c h a r , d e c im a l, d o u b l e, f 1 o a t,
statycznych, podczas gdy klasa Di r e c t o r y l n f o oferuje S t r i ng oraz c h a r [ ] , oraz typów liczbowych bez znaku, np. ł
tworzenie obiektów i odwołania do metod za pomocą instancji l i c z n i k += 1; Xml Docum ent dokum ent = new
F ile S t r e a m s t r u m ie ń = F i l e .
obiektu (analogicznie wygląda sytuacja w przypadku klas F i 1 e } Xml D ocum e nt( ) ;
O p e n R e a d (@ "c :\ d o k u m e n t.x m l" } ;
i F i 1 e l n f o — dotyczą one operacji na plikach). r e t u r n w yni k i ; d o k u m e n t. L o a d (@ " c :\d o k u m e n t. x m l" ) ;
B in a r y R e a d e r c z y t n i k = new
} Xml E le m e n t e le m e n t = dokum e nt.
B i n a r y R e a d e r ( s t r u m ie n ) ;
Directory Operacje na plikach I katalogach zostały rozdzielone ze względu na ch a r c = c z y t n ik .R e a d C h a r ();
D o cu m e n tE le m e n t;
Klasa udostępnia informacje na temat struktury katalogów oraz f o r e a c h (Xm lN ode node in e le m e n t.
różnice w ich opisie. Powyższą metodę można nieco skrócić przez c z y t n ik .C lo s e ();
szczegółowych danych dotyczących poszczególnych katalogów. C h ild N o d e s )
zastosowanie jednolitego opisu dla wszystkich elementów. Wywołania
Wszystkie jej metody są oznaczone jako statyczne. Przykład: i
metod G e t F i 1 e s ( ) i G e tD i r e c t o r i es ( ) można zastąpić
Di r e c t o r y l n f o C r e a t e D i r e c t o r y ( S t r i ng Pierwsza metoda zwraca początkowe 1024 bajty z pliku o danej i f (n o d e .N odeType == Xm lN o d eT yp e .
metodą Di r e c t o r y .G e t F i l e S y s t emEn t r i e s ( ) ,
s c i e z k a ) — tworzy katalog o podanej ścieżce, ścieżce, a druga metoda zwraca 5 początkowych linii tekstu E le m e n t)
a dwie konstrukcje f o r e a c h — jedną.
v o id D e l e t e ( S t r i n g ś c i e ż k a , bool (obydwie metody zwracają dane, jeśli są możliwe do odczytania). {
p o d k a t a l o g i ) — usuwa katalog o podanej nazwie, jeśli
argument p o d k a t a l o g i ma wartość tr u e , zostaną usunięte
Strumienie p r iv a t e b y te Q c z y t a jB in a r n e ( S t r in g
ś c ie ż k a )
f o r e a c h (Xm lN ode n in n o d e .
C h ild N o d e s )
Strumienie stanowią abstrakcyjną konstrukcją obsługującą ciąg bajtów.
również podkatalogi i pliki wewnątrz katalogu (jeśli argument ma { {
Ogromna większość operacji polegających na wczytywaniu i zapisywaniu
wartość f a 1 s e, a istnieją podkatalogi bądź pliki, metoda zwróci F ile S t r e a m s t ru m ie ń = F i l e . i f (n.N am e == " im ie " )
danych wykorzystuje strumienie. Klasą bazową dla wszystkich strumieni
wyjątek klasy IO E x c e p t i on), O p e n R e a d ( s c ie z k a ) ; M e s s a g e B o x .S h o w ( r .F ir s t C h ild .
jest klasa S t ream. Jest to klasa abstrakcyjna Większość metod jako
b o o l E x i s t s ( S t r i n g ś c i e ż k a ) — zwracat r u e , b y t e Q b u f o r = new b y t e [ 1 0 2 4 ] ; V a lu e );
argumenty przyjmuje obiekty właśnie tej klasy, co gwarantuje niezwykłą
jeśli podany katalog istnieje, f a 1 s e w przeciwnym wypadku i n t i l o s c = s t r u m ie ń .R e a d f b u f o r , }
elastyczność kodu (w takiej sytuacji można podać zarówno strumień
S y s t e m .S e c u r it y .A c c e s s C o n t r o l. 0 , 1 0 2 4 ); }
obsługujący plik, jak I połączenie internetowe!). Klasy strumieni znajdują
D ir e c t o r y S e c u r i t y b y t e Q w y n ik = new b y t e [ i l o s c ] ; 1
się w przestrzeni nazw S y ste m . 10.
G e t A c c e s s C o n t r o l ( S t r i n g ś c i e ż k a ) — zwraca A r r a y . C o p y ( b u f o r , w y n ik , i l o s c ) ;
}
systemowe uprawnienia dostępu dla katalogu. Właściwości klasy Stream s t r u m ie ń .C lo s e ( ) ;
r e t u r n w y n ik ;
D a te T im e G e t C r e a t io n T im e f s t r in g ś c i e ż k a ) b oo l CanRead — określa, czy strumień ma możliwość czytania Przy użyciu pierwszej instrukcji warunkowej sprawdzane są tylko
— zwraca datę i czas utworzenia katalogu (wyrażony za pomocą danych (t r u e — tak, f a l se — nie), 1 elementy oso ba. Następnie w danym elemencie o so b a jest
p r i v a t e S t r i ng [] c z y t a j T e k s t ( S t r i n g szukany element i mi e. Na końcu program uzyskuje dostęp
czasu lokalnego). b oo l C a n T i meout — określa, czy strumień może przerwać
ś c ie ż k a ) do pierwszego i jedynego elementu należącego do elementu
S t r i n g Q G e tD i r e c t o r i e s ( S t r i ng ś c i e ż k a ) oczekiwanie na zapis lub odczyt w przypadku przekroczenia limitu
— pobiera wszystkie nazwy podkatalogów z danego katalogu. czasu oczekiwania (t r u e — tak, f a l se — nie). ( im ie — wartości tekstowej.
Ul
ul K ościuszki 1c, 44-100 Gliw ice Zam ów informacje o nowościach: O http://helion.pl/nowosci
tel.: 32 230 98 63
e-mail: helion@ helion.pl
http://helion.pl Aby ocenić tę tablicę, zajrzyj pod adres:
heliony
k s i ę g a r r n i
I n fo r m a t y k a w n a jle p s z y m w y d a n iu O http://helion.pl/user/opinie7ticsh2 i n t e r n e t y o w
■