600 likes | 761 Views
Programowanie urządzeń mobilnych. Paweł Fiderek 2011. 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.
E N D
Programowanie urządzeń mobilnych Paweł Fiderek 2011
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 PUM 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. PUM 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". PUM wykład 3 Paweł Fiderek
Wygląd GUI systemu Windows CE 1.0 Źródło: Internet. PUM 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.0 10 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). PUM 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. ApplicationProgrammingInterface) 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 Phoneedition • Windows Mobile 2003SE Phoneedition • Windows Mobile 5.0 (Magneto) Phoneedition • Windows Mobile 6.0 Phoneedition • 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) PUM 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. PUM 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 IntermediateLanguage). 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. CommonLanguageRuntime). 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 . PUM wykład 3 Paweł Fiderek
Architektura .NET Compact Framework Źródło: Internet PUM wykład 3 Paweł Fiderek
CommonLanguageRuntime – 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: Runtimeexecutionengine- 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 ( IntermediateLanguage ) 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 ). CommonLanguageSpecification – 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. PUM 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. ManagedCode - 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”. GarbageCollection – .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 GarbageCollection. 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. PUM wykład 3 Paweł Fiderek
Podstawy działania Garbagecollection Garbagecollection (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. Garbagecollection 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 (referencecounting) 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. PUM 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. PUM wykład 3 Paweł Fiderek
ClassLibrarySupport 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. PUM wykład 3 Paweł Fiderek
Dalsze różnice · - COM Interop – nie wspierane, należy wykonywać funkcje DLL, które wywołują obiekty COM - Data – podzbiórimplementacji 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 PUM 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 PUM 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ń. PUM wykład 3 Paweł Fiderek
Możliwości programistyczne w Windows Mobile 5.0 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. : • Nowe interfejsy API dostarczają wielu nowych możliwości np.: zarządzanie obrazami, kontaktami, • Większa przenośność kodu i aplikacji pomiędzy urządzeniami Pocket PC a Smartphone. • 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; • 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. • API do obsługi wbudowanego aparatu. • Windows Media Player 10 Mobile pozwala na łatwa dołączenie multimediów do tworzonej aplikacji (np. wbudowanie odtwarzacza multimedialnego). • Obsługa Direct3D dostarcza możliwości tworzenia aplikacji trójwymiarowych. • Obsługa DirectDraw zapewnia większą kontrolę i elastyczność w aplikacjach 2D. PUM 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. PUM wykład 3 Paweł Fiderek
Programowanie GUI w Windows Mobile PUM wykład 3 Paweł Fiderek
CheckBox cb = newCheckBox(); cb.Content = "CheckBox"; spanel2.Children.Add(cb); <Stylex:Key="Properties" TargetType="{x:TypeCheckBox}"> <SetterProperty= "Background" Value= "Purple"/> <SetterProperty= "Foreground" Value= "Green"/> <SetterProperty= "BorderBrush" Value= "Black"/> <SetterProperty= "BorderThickness" Value= "5"/> </Style> PUM wykład 3 Paweł Fiderek
Combo Box this.comboBox1 = newSystem.Windows.Forms.ComboBox(); AddItemsCore Contains OnDoubleClick RefreshItems PUM wykład 3 Paweł Fiderek
CommandButton Pocket PC Smartphone btncsharp = newButton(); btncsharp.Content = "Createdwith C# code."; btncsharp.Background = SystemColors.ControlDarkDarkBrush; btncsharp.FontSize = SystemFonts.CaptionFontSize; cv2.Children.Add(btncsharp); <Stylex:Key="Triggers" TargetType="Button"> <Style.Triggers><TriggerProperty="IsMouseOver" Value="true"> <SetterProperty= "Background" Value="Red"/> </Trigger> <TriggerProperty="IsPressed" Value="true"> <SetterProperty= "Foreground" Value="Green"/> </Trigger></Style.Triggers> </Style> PUM wykład 3 Paweł Fiderek
Context Menu ContextMenumnuContextMenu = newContextMenu(); this.ContextMenu = mnuContextMenu; MenuItemmnuItemNew = newMenuItem(); MenuItemmnuItemOpen = newMenuItem(); mnuItemNew.Text = "&New"; mnuItemOpen.Text = "&Open"; mnuContextMenu.MenuItems.Add(mnuItemNew); mnuContextMenu.MenuItems.Add(mnuItemOpen); PUM wykład 3 Paweł Fiderek
DatePicker Pocket PC Smartphone publicvoidCreateMyDateTimePicker() { // Create a newDateTimePickercontrol and initializeit. DateTimePicker dateTimePicker1 = newDateTimePicker(); // Set theMinDate and MaxDate. dateTimePicker1.MinDate = newDateTime(1985, 6, 20); dateTimePicker1.MaxDate = DateTime.Today; // Set theCustomFormatstring. dateTimePicker1.CustomFormat = "MMMM dd, yyyy - dddd"; dateTimePicker1.Format = DateTimePickerFormat.Custom; //Show theCheckBox and display thecontrol //as an up-downcontrol. dateTimePicker1.ShowCheckBox = true; dateTimePicker1.ShowUpDown = true; } PUM wykład 3 Paweł Fiderek
Hyperlink HyperLink link = (HyperLink) e.Item.FindControl("viewDetails"); PUM wykład 3 Paweł Fiderek
List Box privatevoid button1_Click(objectsender, System.EventArgs e) { // Create an instance of theListBox. ListBox listBox1 = newListBox(); // Set thesize and location of theListBox. listBox1.Size = newSystem.Drawing.Size(200, 100); listBox1.Location = newSystem.Drawing.Point(10,10); // AddtheListBox to the form. this.Controls.Add(listBox1); // Set theListBox to display itemsinmultiplecolumns. listBox1.MultiColumn = true; // Set theselectionmode to multiple and extended. listBox1.SelectionMode = SelectionMode.MultiExtended; // Shutdownthe painting of theListBox as itemsareadded. listBox1.BeginUpdate(); // Loopthrough and add 50 items to theListBox. for (int x = 1; x <= 50; x++) { listBox1.Items.Add("Item " + x.ToString()); } // AllowtheListBox to repaint and display thenewitems. listBox1.EndUpdate(); // SelectthreeitemsfromtheListBox. listBox1.SetSelected(1, true); listBox1.SetSelected(3, true); listBox1.SetSelected(5, true); // Display thesecondselecteditemintheListBox to theconsole. System.Diagnostics.Debug.WriteLine(listBox1.SelectedItems[1].ToString()); // Display theindex of the first selecteditemintheListBox. System.Diagnostics.Debug.WriteLine(listBox1.SelectedIndices[0].ToString()); } PUM wykład 3 Paweł Fiderek
List View ListViewItem listViewItem1 = newListViewItem(); ListViewSubItem listViewSubItem1 = newListViewSubItem(); listViewItem1.Text = "Joe"; listViewSubItem1.Text = "123 Somewhere Street"; listViewItem1.SubItems.Add(listViewSubItem1); listView1.Items.Add(listViewItem1); ColumnHeader columnHeader1 = newColumnHeader(); ColumnHeader columnHeader2 = newColumnHeader() ; ColumnHeader columnHeader3 = newColumnHeader(); columnHeader1.Text = "Name"; columnHeader2.Text = "Address"; columnHeader3.Text = "TelephoneNumber"; listView1.Columns.Add(columnHeader1); listView1.Columns.Add(columnHeader2); listView1.Columns.Add(columnHeader3); listView1.Groups.Add(newListViewGroup("Friends", HorizontalAlignment.Left)); PUM wykład 3 Paweł Fiderek
OptionButton this.groupBox1 = newSystem.Windows.Forms.GroupBox(); this.radioButton2 = newSystem.Windows.Forms.RadioButton(); this.radioButton1 = newSystem.Windows.Forms.RadioButton(); this.getSelectedRB = newSystem.Windows.Forms.Button(); this.groupBox1.Controls.Add(this.radioButton2); this.groupBox1.Controls.Add(this.radioButton1); this.groupBox1.Controls.Add(this.getSelectedRB); this.groupBox1.Location = newSystem.Drawing.Point(30, 100); this.groupBox1.Size = newSystem.Drawing.Size(220, 125); this.groupBox1.Text = "Radio Buttons"; PUM wykład 3 Paweł Fiderek
Progress Bar this.progressBar1 = new System.Windows.Forms.ProgressBar(); progressBar1.Maximum = 10; progressBar1.Location = newSystem.Drawing.Point(8, 312); progressBar1.Minimum = 0; progressBar1.TabIndex = 0; progressBar1.Value = 0; PUM wykład 3 Paweł Fiderek
Scroll Bar hscrollb = newScrollBar(); hscrollb.Orientation = Orientation.Horizontal; spanel1.Children.Add(hscrollb); vscrollb = newScrollBar(); vscrollb.Orientation = Orientation.Vertical; vscrollb.HorizontalAlignment = HorizontalAlignment.Left; vscrollb.Width = (20); vscrollb.Height = (80); Canvas.SetLeft(vscrollb, (50)); spanel1.Children.Add(vscrollb); PUM wykład 3 Paweł Fiderek
Slider Sliderhslider = newSlider(); 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); <Stylex:Key="Triggers" TargetType="{x:TypeSlider}"> <Style.Triggers> <TriggerProperty="Slider.IsMouseOver" Value="True"> <SetterProperty= "Background" Value="Green"/> <SetterProperty= "IsSnapToTickEnabled" Value="True"/> <SetterProperty= "TickPlacement" Value="TopLeft"/> <SetterProperty= "TickFrequency" Value="1"/></Trigger> </Style.Triggers> </Style> PUM wykład 3 Paweł Fiderek
Tab privatevoidMyTabs() { this.tabControl1 = newTabControl(); // InvokestheTabPage() constructor to createthe tabPage1. this.tabPage1 = newSystem.Windows.Forms.TabPage(); this.tabControl1.Controls.AddRange(new Control[] { this.tabPage1}); this.tabControl1.Location = new Point(25, 25); this.tabControl1.Size = newSize(250, 250); this.ClientSize = newSize(300, 300); this.Controls.AddRange(new Control[] { this.tabControl1}); } PUM wykład 3 Paweł Fiderek
TextBox 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!"; } PUM wykład 3 Paweł Fiderek