60
Programowanie urządzeń mobilnych Paweł Fiderek 2011

Programowanie urz*dze* mobilnych

  • Upload
    voliem

  • View
    231

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Programowanie urz*dze* mobilnych

Programowanie urządzeń mobilnych

Paweł Fiderek2011

Page 2: Programowanie urz*dze* mobilnych

Wykład 3 – Windows Mobile wprowadzenie

• Historia systemu– Pochodzenie– Rozwój kolejnych wersji

• Wprowadzenie– Podstawowe elementy GUI– Wprowadzenie do programowania urządzeń z

systemem Windows Mobile

2PUM wykład 3 Paweł Fiderek

Page 3: Programowanie urz*dze* mobilnych

3PUM wykład 3 Paweł Fiderek

Windows CE – system operacyjny opracowany przez Microsoft jako system dla urządzeń przenośnych typu PDA (np.: Pocket PC lub Palm) lub jako system wbudowany. Wersja 1.0 była bardziej rozbudowanym organizerem niż systemem operacyjnym (z punktu widzenia użytkownika.)

Windows CE jest zoptymalizowany dla urządzeń o minimalnej pamięci – jądro Windows CE może być uruchomione nawet w 1 MB pamięci. System nie wymaga do pracy dysku twardego, może być więc „system zamkniętym”, i być umieszczony w pamięci ROM. Obsługuje 256 priorytetów wykonywania i korzysta z dziedziczenia priorytetów w razie, przydatnych w sytuacji inwersji priorytetów. Podstawową jednostką wykonywania jest wątek, co umożliwia prostsze zarządzanie procesami. Windows CE używany jest także w komputerach pokładowych samochodów wraz z systemem rozpoznawania mowy mającym zapewnić bezdotykową obsługę systemu operacyjnego.

Page 4: Programowanie urz*dze* mobilnych

4PUM wykład 3 Paweł Fiderek

Windows CE 1.x specyfikacja urządzeń na których system miał pracować :

Wymiary nie większe niż 18x10x2.5 cmZasilanie z dwóch baterii AAWaga mniejsza niż 500 gKlawiatura QWERTY zawierająca klawisze takie jak SHIFT, CTRL i ALTDotykowy wyświetlacz LCD o rozdzielczości 480x240 pikseli w 4 odcieniach szarościMinimum 4 MB pamięci ROMMinimum 2 MB pamięci RAMPort podczerwieniPort COM zgodny z RS-232Slot PC Card (PCMCIA)Wbudowana obsługa dźwiękuProcesor SuperH 3, MIPS 3000 lub MIPS 4000

Microsoft nie wypowiedział się jednoznacznie co oznacza skrót CE, lecz twierdzi, że taka nazwa nie była celowa. Oświadczył jednak, że CE wyrażać może w sobie wiele koncepcji, takich jak Compact (ang. Kompaktowy), Connectable (ang. Łącznościowy), Compatible (ang. Kompatybilny). Najczęściej jednak nazwę tłumaczy się jako "Compact Edition" lub "Consumer Electronics".

Page 5: Programowanie urz*dze* mobilnych

5PUM wykład 3 Paweł Fiderek

Wygląd GUI systemu Windows CE 1.0Źródło: Internet.

Page 6: Programowanie urz*dze* mobilnych

6PUM wykład 3 Paweł Fiderek

Wersje systemu

1 Windows CE 1.x2 Windows CE HandheldPC 2.x3 Windows CE 2.11 - Palm-Size PC 1.14 Windows CE 2.11 - Palm-Size PC 1.25 Windows CE HandeldPC 2.11 - HandheldPC Professional6 Windows CE HandeldPC 3.x - HandheldPC 20007 Windows CE .net (4.x)8 Windows CE 5.09 Windows CE 6.010 Windows Mobile (i ten system również posiada kilka wersji.)

Od wersji 4.0 z systemem zintegrowano .NET Compact Framework. Windows CE 6.0 powstał we wrześniu 2006 roku. Nazwa kodowa "Yamazaki". M.in. zwiększono przestrzeń adresową procesu z 32 MB do 1 GB i umożliwiono uruchomienie 32 768 procesów (w porównaniu z 32 w wersji 5.0).

Page 7: Programowanie urz*dze* mobilnych

7PUM wykład 3 Paweł Fiderek

Microsoft Windows Mobile

Microsoft Windows Mobile to 32-bitowy system operacyjny przeznaczony dla urządzeń typu Pocket PC oraz Smartphone. Windows Mobile nie jest zupełnie osobnym systemem, lecz rozszerzeniem Windows CE o dodatkową funkcjonalność, API (ang. Application Programming Interface) oraz Shell.

Dostępne wersje Systemu:• Windows Mobile 2003• Windows Mobile 2003SE• Windows Mobile 5.0• Windows Mobile 6.0 (64 MB RAM, wyświetlacz 3,5 cala)• Windows Mobile 6.1 Classic

Istnieją wersje przeznaczone dla PocketPC z wbudowanym modułem GSM:• Windows Mobile 2003 Premium Phone edition• Windows Mobile 2003SE Phone edition• Windows Mobile 5.0 (Magneto) Phone edition• Windows Mobile 6.0 Phone edition• Windows Mobile 6.1 Professional• Windows Mobile 6.5 Professional• Windows Mobile 6.5.1 Professional (w trakcie rozwoju)• Windows Mobile 7 Professional (w trakcie rozwoju)

Page 8: Programowanie urz*dze* mobilnych

8PUM wykład 3 Paweł Fiderek

Istnieją również wersje dla smartphone obsługujące ekrany 176x220 oraz 240x320 bez ekranu dotykowego:• Smartphone 2002• Windows Mobile 2003 for Smartphone• Windows Mobile 2003SE for Smartphone• Windows Mobile 5.0 for Smartphone• Windows Mobile 6.0 for Smartphone• Windows Mobile 6.1 Standard

Wygląd GUI systemu Windows Mobile 5.0

Źródło: Internet.

Page 9: Programowanie urz*dze* mobilnych

9PUM wykład 3 Paweł Fiderek

.NET Compact Framework

Platforma umożliwiająca uruchamiane aplikacji napisanych w językach rodziny .NET, bedaca swego rodzaju maszyną wirtualną (jak np. JVM).

Zatem można powiedzieć, że .Net Framework to maszyna wirtualna udostępniająca biblioteki, odpowiedzialne za nisko-poziomową interakcję z systemem operacyjnym, językom zarządzanym (ang. managed) wysokiego poziomu, np. C#. Kod napisany w C# czy J# jest najpierw kompilowany do pośredniego języka MSIL (Microsoft Intermediate Language). Wynikiem tego działania jest moduł zawierający instrukcje MSIL. Jedną z przyczyn zastosowania MSIL jest mozliwość wykorzystywania wielu języków programowania (VB, C#, J#, JScript, i Visual C++), skąd pojawia się konieczność pośredniej kompilacji kodu do MSIL. Następnie, moduł ten zamieniany jest na natywne instrukcje danego systemu operacyjnego CLR (ang. Common Language Runtime). Zatem .Net Framework postrzegać powinno się bardziej, jako platformę wielojęzykową, a nie jak maszynę wirtualną (jak np. maszyna wirtualna Javy) – wieloplatformową. Przeprowadzane są obecnie prace nad rozszerzeniem owych pięciu wspieranych języków programowania do ponad dwudziestu pięciu .

Page 10: Programowanie urz*dze* mobilnych

10PUM wykład 3 Paweł Fiderek

Architektura .NET Compact FrameworkŹródło: Internet

Page 11: Programowanie urz*dze* mobilnych

11PUM wykład 3 Paweł Fiderek

Common Language Runtime – wspólne środowisko uruchomieniowe. Jego podstawowym zadaniem jest zlokalizowanie, wczytywanie oraz zarządzanie typami .NET w imieniu użytkownika. CLR zajmuje się niskim poziomem pracy aplikacji np.: automatyczne zarządzanie pamięcią, integracją językową oraz ułatwianie wdrożenia ( i wsparcie dla różnego rodzaju wersji ) bibliotek kodu binarnego.

CLR składa się z dwóch zasadniczych elementów:

Runtime execution engine - mechanizm wykonawczy środowiska uruchomieniowego – mscoree.dll. Kiedy pakiet ( assembly ) jest wywoływany, automatycznie wczytywany jest mscoree.dll, który z kolei wczytuje do pamięci potrzebny pakiet. Mechanizm uruchomieniowy jest odpowiedzialny za wykonanie szeregu zadań. Pierwszym i najważniejszym jest określenie położenia pakietu i znalezienie wymaganego typu ( np. klasy, interfejsu, struktury itp. ) w kodzie binarnym przez odczytanie dostarczonych metadanych. Mechanizm wykonawczy kompiluje zasocjowany IL ( Intermediate Language ) do instrukcji specyficznych dla danej platformy.

Biblioteka klas podstawowych. Składa się z kilku oddzielnych pakietów, najważniejszym jest mscorlib.dll. Zawiera dużą liczbę podstawowych typów, które hermetyzują dużą różnorodność najczęściej spotykanych zadań programistycznych. Każde rozwiązanie oparte na platformie .NET, zawsze wykorzystuje się ten pakiet i czasem kilka innych .NET ( zarówno oferowanych przez system jak i przygotowanych przez użytkownika ).

Common Language Specification – specyfikacja wspólnego języka. Jest zbiorem zasad definiujących podzbiór wspólnych typów (dla różnych języków), który daje pewność, że kod binarny .NET może zostać bez klejenia wykorzystany przez wszystkie języki współpracujące na platformie .NET.

Page 12: Programowanie urz*dze* mobilnych

12PUM wykład 3 Paweł Fiderek

Common Type System – zbiór wbudowanych podstawowych i wspólnych typów. Zawiera pełny opis wszystkich możliwych typów danych, obsługiwanych przez środowisko uruchomieniowe. Zawiera także informacje, o tym, jakie interakcje mogą zachodzić między nimi, oraz określa szczegóły ich reprezentacji w formie metadanych .NET.

Managed Code - Kompilatory zgodne z CLR zamieniają kod źródłowy aplikacji na kod wykonywalny, zapisany w standardowym języku pośrednim MSIL, oraz na metadane — informacje na temat kodu wykonywalnego oraz danych wykorzystywanych przez ten kod. Platforma .NET umożliwia pisanie aplikacji w wielu językach, ale dzięki MC kompilator zamienia wszystkie operacje na typach danych, to jest klasach, strukturach, liczbach całkowitych, łańcuchach znaków — na język MSIL i metadane.W czasie wykonywania aplikacji, CLR tłumaczy kod MSIL na kod maszynowy (natywny) procesora, na którym wykonywana jest aplikacja. Taka konwersja kodu z MSIL na kod maszynowy daje możliwość zarządzania wykonywaniem aplikacji, co pozwala uniknąć wielu problemów — stąd nazwa”kod zarządzany”.

Garbage Collection – .NET Compact Framework zapewnia zwalnianie wszystkich zasobów, z jakich korzysta aplikacja, po jej zakończeniu. W tym celu wykorzystywany jest mechanizm o nazwie Garbate Collection. Compact Framework decyduje kiedy powinien zostać uruchomiony proces Garbage Collection. Może on zostać uruchomiony w pojedynczej domenie aplikacji bądź też we wszystkich dostępnych. Pozwala to zapobiegać sytuacją, gdy jedna aplikacja zużywa zbyt dużo pamięci w porównaniu z innymi.

Page 13: Programowanie urz*dze* mobilnych

Podstawy działania Garbage collection

13PUM wykład 3 Paweł Fiderek

Garbage collection (zbieranie nieużytków) to architektura zarządzania pamięcią, w której proces zwalniania nieużywanych jej obszarów odbywa się automatycznie. Mechanizm taki stosuje się na przykład w wysokopoziomowych językach programowania, przy czym za jego obsługę nie odpowiada sam język, lecz wirtualna maszyna.Garbage collection zostało wymyślone przez Johna McCarthy'ego około roku 1959 do rozwiązania problemu ręcznego zarządzania pamięcią w Lispie. Był to pierwszy język obsługujący ten mechanizm. Przykładowymi językami obsługującymi ten mechanizm są Smalltalk, Python, Ruby, Java, C#. Istnieje co najmniej kilka metod pracy GC.

Liczenie odnośników (reference counting)W tej metodzie każda jednostka zarezerwowanej pamięci ma licznik, w którym jest zapisana liczba odwołań do tej jednostki.Za każdym razem, kiedy dodajemy odwołanie, zwiększamy licznik we wskazywanej jednostce, a kiedy odwołanie usuwamy, zmniejszamy licznik. Jeśli wartość licznika osiągnęła zero, to usuwamy wszystkie odnośniki wychodzące z tego obszaru pamięci i zwalniamy go.

Metoda ta nie gwarantuje zwolnienia wszystkich niepotrzebnych obszarów w sytuacji, gdy występują tzw. wzajemne (cykliczne) odwołania. Przykładowo, jeśli X zawiera wskaźnik na Y, a Y zawiera wskaźnik na X (np. są to dwa komunikujące się ze sobą obiekty), licznik w żadnym z nich nigdy nie osiągnie zera.

Page 14: Programowanie urz*dze* mobilnych

14PUM wykład 3 Paweł Fiderek

W liczeniu odnośników dodatkowe obliczenia związane z pracą kolektora nieużytków są rozłożone w czasie, gdyż wszystkie operacje muszą dbać o liczniki, co może skutkować znacznie mniejszym - lub też przeciwnie - znacznie większym, obciążeniem w porównaniu z innymi metodami.

Mark and Sweep. W tej metodzie każda jednostka pamięci zawiera pojedynczy bit, który jest na początku czysty. Kiedy maszyna wirtualna przechodzi w fazę "garbage collection", zaczyna sprawdzać obiekty, o których wie, że istnieją do nich odwołania, zaznacza w nich ten bit i rekursywnie przechodzi przez wszystkie komórki przez nie wskazywane. Kiedy już wszystko zostało oznaczone, komórki bez znacznika są zwalniane, bo na pewno nic na nie nie wskazuje, po czym znacznik jest czyszczony wszystkim komórkom.Mark and Sweep jest obecnie najpopularniejszą metodą.

Garbage collection przez kopiowanie

Ta metoda polega na tym, że wszystko zostaje rekursywnie przekopiowane do innego obszaru w pamięci - najpierw kopiowany jest początkowy zestaw danych, potem wszystko co było przez niego wskazywane, itd. Na końcu zwalniamy początkową pamięć.W ten sposób „przez odsiew” usuwane zostają elementy, na które nic nie wskazuje.I w ten sposób oszczędza się na konieczności ustawiania bitów w "mark and sweep", dodatkowo, regularnie defragmentuje się pamięć. Problemy jakie mogą wystąpić to konieczność poniesienia kosztu kopiowania oraz konieczność posiadania dużej ilości wolnej pamięci. Ten sposób byłby bardziej praktyczny na systemach, na których możliwa jest tymczasowa alokacja dużej ilości pamięci.

Page 15: Programowanie urz*dze* mobilnych

15PUM wykład 3 Paweł Fiderek

Class Library Support Klasy są zorganizowane hierarchicznie wewnątrz przestrzeni nazw ( namespace ). .NET Compact Framework współdzieli około 2/3 klas z pełną wersją .NET Framework. Mimo to występują pomiędzy nimi pewne istotne różnice, i trzeba być tego świadom podczas tworzenia aplikacji z wykorzystaniem .NET Compact Framework.

Klasy współdzielone:.NET Compact Framework dostarcza szeroki podzbiór klas i metod do budowania aplikacji, które

są później uruchamiane na urządzeniach z ograniczonymi zasobami. Wszystkie te klasy są semantycznie kompatybilne z klasami o tych samych nazwach w .NET Framework. .NET Compact Framework posiada wsparcie dla istotnych elementów takich jak:· Usługi sieci Web oparte na XML· Zarządzanie relacyjnymi danymi· Rozbudowana funkcjonalność XML· Rozbudowane klasy do rysowania, takie jak Image Controls· Potężne możliwości budowania interfejsu użytkownika..NET Compact Framework nie wspiera klas ASP .NET.

Page 16: Programowanie urz*dze* mobilnych

Dalsze różnice

16PUM wykład 3 Paweł Fiderek

·

- COM Interop – nie wspierane, należy wykonywać funkcje DLL, które wywołują obiekty COM- Data – podzbiór implementacji ADO .NET oraz SQL Server CE- ASP .NET – nie wspierany. Należy używać ASP .NET Mobile Web Controls do tworzenia stron sieci WWW dla urządzeń przenośnych- XML – ze względu na rozmiar brak obsługi walidacji XML schema lub zapytań XPath w dokumentach XML.- Aby zmniejszyć rozmiary środowiska zrezygnowano z wielu przeładowanych metod- Brak niektórych kontrolek ( np. wsparcia dla drukowania )- Ze względu na wydajność brak klas BinaryFormatter i SoapFormatter- Bezpieczeństwo – brak zabezpieczenia dostępu do kodu niezarządzanego. Dowolna aplikacja może wywołać dowolny system lub nie systemowe API. Brak systemu bezpieczeństwa opartego na rolach

Page 17: Programowanie urz*dze* mobilnych

17PUM wykład 3 Paweł Fiderek

·

- COM Interop – nie wspierane, należy wykonywać funkcje DLL, które wywołują obiekty COM- Data – podzbiór implementacji ADO .NET oraz SQL Server CE- ASP .NET – nie wspierany. Należy używać ASP .NET Mobile Web Controls do tworzenia stron sieci WWW dla urządzeń przenośnych- XML – ze względu na rozmiar brak obsługi walidacji XML schema lub zapytań XPath w dokumentach XML.- Aby zmniejszyć rozmiary środowiska zrezygnowano z wielu przeładowanych metod- Brak niektórych kontrolek ( np. wsparcia dla drukowania )- Ze względu na wydajność brak klas BinaryFormatter i SoapFormatter- Bezpieczeństwo – brak zabezpieczenia dostępu do kodu niezarządzanego. Dowolna aplikacja może wywołać dowolny system lub nie systemowe API. Brak systemu bezpieczeństwa opartego na rolach

Page 18: Programowanie urz*dze* mobilnych

18PUM wykład 3 Paweł Fiderek

MMIT dostarcza wszelkich korzyści projektowania aplikacji z pomocą ASP .NET. Ponadto MMIT posiada następujące udogodnienia:

- Wsparcie dla szerokiej gamy urządzeń. Pozwala na używanie ASP .NET na wielu urządzeniach mobilnych, począwszy na telefonach komórkowych, skończywszy na urządzeniach Pocket PC.

- Strony WWW stworzone z wykorzystaniem MMIT są tak samo prezentowane na wszystkich wspieranych urządzeniach, nie trzeba jej dostosowywać do poszczególnych urządzeń. Można tworzyć złożoną aplikację wykorzystując zbiór mobilnych kontrolek serwerowych bez żadnej wiedzy na temat WML-a lub innych podobnych języków. Środowisko uruchomieniowe bierze na siebie odpowiedzialność za różnice w implementacjach pomiędzy różnymi przeglądarkami, urządzeniami i bramkami sieciowymi.

- Możliwość personalizacji i rozszerzania funkcjonalności. MMIT dostarcza takie same możliwości personalizacji i rozszerzalności jak ASP .NET. W dodatku narzędzie pozwala na dodawanie obsługi nowych urządzeń, bez konieczności jakiejkolwiek zmiany w kodzie aplikacji. Dzięki temu można mieć pewność, że

aplikacja stworzona dzisiaj będzie w przyszłości działała na nowej generacji urządzeń.

Page 19: Programowanie urz*dze* mobilnych

Możliwości programistyczne w Windows Mobile 5.0

19PUM wykład 3 Paweł Fiderek

Windows Mobile 5.0 zapewnia programistom nowe, liczne interfejsy programistyczne. Dzięki nim,

programista może się skupić na konkretnych celach aplikacji, a nie sposobach ich realizacji. Elementy wspomaganie przez interfejsy to np.: rysowanie 2D i 3D, dostarczają nowych możliwości komunikacyjnych oraz ułatwiają obsługę elementów sprzętowych takich jak kamera czy też system nawigacji satelitarnej. Inne usprawnienia to m. in. :

1. Nowe interfejsy API dostarczają wielu nowych możliwości np.: zarządzanie obrazami, kontaktami, 2. Większa przenośność kodu i aplikacji pomiędzy urządzeniami Pocket PC a Smartphone.3. Nowe API do śledzenia aktywności systemu takich jak: zmiany w połączeniu z siecią, odbiór

wiadomości SMS lub nadejście połączenia telefonicznego;4. Rozbudowane narzędzia do testowania aplikacji w zależności od orientacji ekranu, rozdzielczości

czy też rodzaju urządzenia – przyspieszają tworzenie aplikacji w Visual Studio.5. API do obsługi wbudowanego aparatu.6. Windows Media Player 10 Mobile pozwala na łatwa dołączenie multimediów do tworzonej

aplikacji (np. wbudowanie odtwarzacza multimedialnego).7. Obsługa Direct3D dostarcza możliwości tworzenia aplikacji trójwymiarowych.8. Obsługa DirectDraw zapewnia większą kontrolę i elastyczność w aplikacjach 2D.

Page 20: Programowanie urz*dze* mobilnych

20PUM wykład 3 Paweł Fiderek

Windows Mobile 5.0 posiada zainstalowane domyślnie w pamięci ROM środowisko .NET Compact Framework 1.0 wraz z SP3. Możemy wyróżnić trzy rodzaje API:

- Nowo dodane API kierowane do programistów tworzących aplikacje w kodzie natywnym;- Istniejące wcześniej natywne API, ale teraz dodatkowo dostępne dla programistów kodu

zarządzanego;- Nowo dodane API dostępne zarówno dla programistów kodu natywnego jak i zarządzanego.

Page 21: Programowanie urz*dze* mobilnych

Programowanie GUI w Windows Mobile

21PUM wykład 3 Paweł Fiderek

Page 22: Programowanie urz*dze* mobilnych

Check Box

22PUM wykład 3 Paweł Fiderek

cb = new CheckBox(); cb.Content = "CheckBox"; spanel2.Children.Add(cb);

<Style x:Key="Properties" TargetType="{x:Type CheckBox}"> <Setter Property = "Background" Value= "Purple"/> <Setter Property = "Foreground" Value= "Green"/> <Setter Property = "BorderBrush" Value= "Black"/> <Setter Property = "BorderThickness" Value= "5"/> </Style>

Page 24: Programowanie urz*dze* mobilnych

Command ButtonPocket PC Smartphone

24PUM wykład 3 Paweł Fiderek

btncsharp = new Button(); btncsharp.Content = "Created with C# code."; btncsharp.Background = SystemColors.ControlDarkDarkBrush; btncsharp.FontSize = SystemFonts.CaptionFontSize; cv2.Children.Add(btncsharp);

<Style x:Key="Triggers" TargetType="Button"> <Style.Triggers> <Trigger Property="IsMouseOver" Value="true"> <Setter Property = "Background" Value="Red"/> </Trigger> <Trigger Property="IsPressed" Value="true"> <Setter Property = "Foreground" Value="Green"/> </Trigger> </Style.Triggers> </Style>

Page 25: Programowanie urz*dze* mobilnych

Context Menu

25PUM wykład 3 Paweł Fiderek

ContextMenu mnuContextMenu = new ContextMenu(); this.ContextMenu = mnuContextMenu;

MenuItem mnuItemNew = new MenuItem(); MenuItem mnuItemOpen = new MenuItem();

mnuItemNew.Text = "&New"; mnuItemOpen.Text = "&Open";

mnuContextMenu.MenuItems.Add(mnuItemNew); mnuContextMenu.MenuItems.Add(mnuItemOpen);

Page 26: Programowanie urz*dze* mobilnych

Date Picker

Pocket PC Smartphone

26PUM wykład 3 Paweł Fiderek

public void CreateMyDateTimePicker() { // Create a new DateTimePicker control and initialize it. DateTimePicker dateTimePicker1 = new DateTimePicker(); // Set the MinDate and MaxDate. dateTimePicker1.MinDate = new DateTime(1985, 6, 20); dateTimePicker1.MaxDate = DateTime.Today; // Set the CustomFormat string. dateTimePicker1.CustomFormat = "MMMM dd, yyyy - dddd"; dateTimePicker1.Format = DateTimePickerFormat.Custom; //Show the CheckBox and display the control //as an up-down control. dateTimePicker1.ShowCheckBox = true; dateTimePicker1.ShowUpDown = true; }

Page 27: Programowanie urz*dze* mobilnych

Hyperlink

HyperLink link = (HyperLink) e.Item.FindControl("viewDetails");

27PUM wykład 3 Paweł Fiderek

Page 28: Programowanie urz*dze* mobilnych

List Box

28PUM wykład 3 Paweł Fiderek

private void button1_Click(object sender, System.EventArgs e) { // Create an instance of the ListBox. ListBox listBox1 = new ListBox(); // Set the size and location of the ListBox. listBox1.Size = new System.Drawing.Size(200, 100); listBox1.Location = new System.Drawing.Point(10,10); // Add the ListBox to the form. this.Controls.Add(listBox1); // Set the ListBox to display items in multiple columns. listBox1.MultiColumn = true; // Set the selection mode to multiple and extended. listBox1.SelectionMode = SelectionMode.MultiExtended; // Shutdown the painting of the ListBox as items are added. listBox1.BeginUpdate(); // Loop through and add 50 items to the ListBox.for (int x = 1; x <= 50; x++) { listBox1.Items.Add("Item " + x.ToString()); } // Allow the ListBox to repaint and display the new items. listBox1.EndUpdate(); // Select three items from the ListBox. listBox1.SetSelected(1, true); listBox1.SetSelected(3, true); listBox1.SetSelected(5, true); // Display the second selected item in the ListBox to the console. System.Diagnostics.Debug.WriteLine(listBox1.SelectedItems[1].ToString()); // Display the index of the first selected item in the ListBox. System.Diagnostics.Debug.WriteLine(listBox1.SelectedIndices[0].ToString()); }

Page 29: Programowanie urz*dze* mobilnych

List View

29PUM wykład 3 Paweł Fiderek

ListViewItem listViewItem1 = new ListViewItem(); ListViewSubItem listViewSubItem1 = new ListViewSubItem();   listViewItem1.Text = "Joe"; listViewSubItem1.Text = "123 Somewhere Street";   listViewItem1.SubItems.Add(listViewSubItem1); listView1.Items.Add(listViewItem1);

ColumnHeader columnHeader1 = new ColumnHeader(); ColumnHeader columnHeader2 = new ColumnHeader(); ColumnHeader columnHeader3 = new ColumnHeader();   columnHeader1.Text = "Name"; columnHeader2.Text = "Address"; columnHeader3.Text = "Telephone Number";   listView1.Columns.Add(columnHeader1); listView1.Columns.Add(columnHeader2); listView1.Columns.Add(columnHeader3);

listView1.Groups.Add(new ListViewGroup("Friends", HorizontalAlignment.Left));

Page 30: Programowanie urz*dze* mobilnych

Option Button

30PUM wykład 3 Paweł Fiderek

this.groupBox1 = new System.Windows.Forms.GroupBox(); this.radioButton2 = new System.Windows.Forms.RadioButton(); this.radioButton1 = new System.Windows.Forms.RadioButton(); this.getSelectedRB = new System.Windows.Forms.Button();

this.groupBox1.Controls.Add(this.radioButton2); this.groupBox1.Controls.Add(this.radioButton1); this.groupBox1.Controls.Add(this.getSelectedRB); this.groupBox1.Location = new System.Drawing.Point(30, 100);this.groupBox1.Size = new System.Drawing.Size(220, 125);this.groupBox1.Text = "Radio Buttons";

Page 31: Programowanie urz*dze* mobilnych

Progress Bar

31PUM wykład 3 Paweł Fiderek

this.progressBar1 = new System.Windows.Forms.ProgressBar(); progressBar1.Maximum = 10;

progressBar1.Location = new System.Drawing.Point(8, 312); progressBar1.Minimum = 0; progressBar1.TabIndex = 0; progressBar1.Value = 0;

Page 32: Programowanie urz*dze* mobilnych

Scroll Bar

32PUM wykład 3 Paweł Fiderek

hscrollb = new ScrollBar(); hscrollb.Orientation = Orientation.Horizontal; spanel1.Children.Add(hscrollb);

vscrollb = new ScrollBar(); vscrollb.Orientation = Orientation.Vertical; vscrollb.HorizontalAlignment = HorizontalAlignment.Left; vscrollb.Width = (20); vscrollb.Height = (80); Canvas.SetLeft(vscrollb, (50)); spanel1.Children.Add(vscrollb);

Page 33: Programowanie urz*dze* mobilnych

Slider

33PUM wykład 3 Paweł Fiderek

Slider hslider = new Slider(); hslider.Orientation = Orientation.Horizontal; hslider.AutoToolTipPlacement = AutoToolTipPlacement.TopLeft; hslider.AutoToolTipPrecision = 2; hslider.IsDirectionReversed = true; hslider.Width = 100; hslider.IsMoveToPointEnabled = false; hslider.SelectionStart = 1.1; hslider.SelectionEnd = 3; hslider.IsSelectionRangeEnabled = false; hslider.IsSnapToTickEnabled = false; hslider.TickFrequency = 3; hslider.TickPlacement = TickPlacement.Both; cv1.Children.Add(hslider);

<Style x:Key="Triggers" TargetType="{x:Type Slider}"> <Style.Triggers> <Trigger Property="Slider.IsMouseOver" Value="True"> <Setter Property = "Background" Value="Green"/> <Setter Property = "IsSnapToTickEnabled" Value ="True"/> <Setter Property = "TickPlacement" Value ="TopLeft"/> <Setter Property = "TickFrequency" Value ="1"/> </Trigger> </Style.Triggers> </Style>

Page 34: Programowanie urz*dze* mobilnych

Tab

34PUM wykład 3 Paweł Fiderek

private void MyTabs() { this.tabControl1 = new TabControl();

// Invokes the TabPage() constructor to create the tabPage1. this.tabPage1 = new System.Windows.Forms.TabPage();

this.tabControl1.Controls.AddRange(new Control[] {

this.tabPage1}); this.tabControl1.Location = new Point(25, 25); this.tabControl1.Size = new Size(250, 250);

this.ClientSize = new Size(300, 300); this.Controls.AddRange(new Control[] {

this.tabControl1}); }

Page 35: Programowanie urz*dze* mobilnych

Text Box

35PUM wykład 3 Paweł Fiderek

private void CreateMyMultilineTextBox() { // Create an instance of a TextBox control. TextBox textBox1 = new TextBox(); // Set the Multiline property to true. textBox1.Multiline = true; // Add vertical scroll bars to the TextBox control. textBox1.ScrollBars = ScrollBars.Vertical; // Allow the RETURN key to be entered in the TextBox control. textBox1.AcceptsReturn = true; // Allow the TAB key to be entered in the TextBox control. textBox1.AcceptsTab = true; // Set WordWrap to True to allow text to wrap to the next line. textBox1.WordWrap = true; // Set the default text of the control. textBox1.Text = "Welcome!"; }

Page 36: Programowanie urz*dze* mobilnych

36PUM wykład 3 Paweł Fiderek

Page 37: Programowanie urz*dze* mobilnych

37PUM wykład 3 Paweł Fiderek

Page 38: Programowanie urz*dze* mobilnych

38PUM wykład 3 Paweł Fiderek

Page 39: Programowanie urz*dze* mobilnych

39PUM wykład 3 Paweł Fiderek

Page 40: Programowanie urz*dze* mobilnych

40PUM wykład 3 Paweł Fiderek

Page 41: Programowanie urz*dze* mobilnych

41PUM wykład 3 Paweł Fiderek

Page 42: Programowanie urz*dze* mobilnych

42PUM wykład 3 Paweł Fiderek

Page 43: Programowanie urz*dze* mobilnych

43PUM wykład 3 Paweł Fiderek

Page 44: Programowanie urz*dze* mobilnych

44PUM wykład 3 Paweł Fiderek

Page 45: Programowanie urz*dze* mobilnych

45PUM wykład 3 Paweł Fiderek

Page 46: Programowanie urz*dze* mobilnych

46PUM wykład 3 Paweł Fiderek

Page 47: Programowanie urz*dze* mobilnych

47PUM wykład 3 Paweł Fiderek

Page 48: Programowanie urz*dze* mobilnych

48PUM wykład 3 Paweł Fiderek

Page 49: Programowanie urz*dze* mobilnych

49PUM wykład 3 Paweł Fiderek

Page 50: Programowanie urz*dze* mobilnych

50PUM wykład 3 Paweł Fiderek

Page 51: Programowanie urz*dze* mobilnych

51PUM wykład 3 Paweł Fiderek

Page 52: Programowanie urz*dze* mobilnych

52PUM wykład 3 Paweł Fiderek

Page 53: Programowanie urz*dze* mobilnych

53PUM wykład 3 Paweł Fiderek

Page 54: Programowanie urz*dze* mobilnych

PUM wykład 3 Paweł Fiderek 54

Page 55: Programowanie urz*dze* mobilnych

PUM wykład 3 Paweł Fiderek 55

Page 56: Programowanie urz*dze* mobilnych

PUM wykład 3 Paweł Fiderek 56

Page 57: Programowanie urz*dze* mobilnych

PUM wykład 3 Paweł Fiderek 57

Page 58: Programowanie urz*dze* mobilnych

PUM wykład 3 Paweł Fiderek 58

Page 59: Programowanie urz*dze* mobilnych

PUM wykład 3 Paweł Fiderek 59

Page 60: Programowanie urz*dze* mobilnych

PUM wykład 3 Paweł Fiderek 60