Kurs programowania 2 - listy Listy rozwijane (ComboBox) Listy rozwijane (rozwijalne) można tworzyć przy użyciu klasy ComboBox. W tabeli poniżej właściwości udostępniane przez tę kontrolkę. Najważniejsza z nich jest Items, jako że zawiera wszystkie elementy znajdujące się na liście. Właściwość ta jest w rzeczywistości kolekcją elementów typu object. Dodawanie elementów można zrealizować stosując konstrukcję: ComboBox.Items.Add( element ); Natomiast ich usunięcie spowoduje wykorzystanie konstrukcji: ComboBox.Items.Remove( element ); Typ Nazwa Znaczenie Color BackColor Określa kolor tła listy. Bounds Bounds Określa rozmiar oraz położenie listy. Cursor Cursor Określa rodzaj kursora wyświetlanego, kiedy wskaźnik myszy znajdzie się nad listą. Font Font Określa rodzaj czcionki, którą będzie wyświetlany tekst znajdujący się na liście. Color ForeColor Określa kolor tekstu. int Height Określa wysokość listy. int ItemHeight Określa wysokość pojedynczego elementu listy. Object -> Collection Items Zbiór elementów listy. int Left Określa położenie lewego górnego rogu w poziomie, w pikselach. Point Location Określa współrzędne lewego górnego rogu listy.
int MaxDropDownItems Maksymalna liczba elementów, które będą wyświetlane po rozwinięciu listy. int MaxLength Maksymalna liczba znaków wyświetlanych w polu edycyjnym listy. string Name Nazwa listy. Control Parent Referencja do obiektu zawierającego listę. Int SelectedIndex Indeks aktualnie zaznaczonego elementu. object SelectedItem Aktualnie zaznaczony element. Size Size Określa wysokość i szerokość listy. bool Sorted Określa, czy elementy listy mają być posortowane. string Text Tekst wyświetlany w polu edycyjnym listy. int Top Określa położenie lewego górnego rogu w pionie, w pikselach. bool Visible Określa, czy lista ma być widoczna. int Width Określa rozmiar listy w poziomie. Jeżeli chcemy dodać większą liczbę elementów jednocześnie, najwygodniej zastosować metodę AddRange. Wybranie przez użytkownika elementu z listy można wykryć poprzez zdarzenie o nazwie SelectedIndexChanged. Odniesienie do wybranego elementu znajdziemy natomiast we właściwości SelectedItem. Zadanie 5 Umieść w oknie aplikacji element ComboBox. Po wybraniu pozycji z listy powinien wyświetlić jej nazwę w oknie dialogowym. using System;
using System.Drawing; using System.Windows.Forms; public class MainForm : Form ComboBox cb = new ComboBox(); public MainForm() this.width = 320; this.height = 200; this.text = "Lista rozwijana"; cb.items.addrange ( new object[] "C#. Praktyczny kurs", "Java. Praktyczny kurs", "JavaScript. Praktyczny kurs", "Tworzenie stron WWW. Praktyczny kurs", "PHP5. Praktyczny kurs" ); cb.width = 200; cb.left = (this.clientsize.width - cb.width) / 2; cb.top = (this.clientsize.height - cb.height) / 2; EventHandler eh = new EventHandler(this.OnSelection); cb.selectedindexchanged += eh; this.controls.add(cb); public void OnSelection(Object sender, EventArgs e) string s = ((ComboBox)sender).SelectedItem.ToString(); MessageBox.Show("Wybrano element: " + s); public static void Main() Application.Run(new MainForm()); Lista rozwijana jest reprezentowana przez pole cb typu ComboBox. Pozycje listy dodawane są za pomocą metody AddRange właściwości Items. Argumentem metody jest nowo utworzona tablica zawierająca poszczególne ciągi znaków składające się na tytuły kilku książek o programowaniu. Aby możliwa była reakcja na wybór elementu listy, zdarzenie SelectedIndexChanged wiązane jest z procedurą obsługi, którą jest metoda OnSelection
klasy MainForm. Zastosowana została nieużywana do tej pory metoda dotarcia do obiektu wywołującego zdarzenie - stosowany jest argument sender metody. Konieczne było przy tym rzutowanie na typ ComboBox, bo type formalnym argumentu jest object. Wybrana przez użytkownika pozycja listy jest uzyskiwana przez odwołanie się do właściwości SelectedItem, a zawarty w niej tekst - przez wywołanie metody ToString. Listy zwykłe (ListBox) Obsługa list zwykłych jest bardzo podobna do obsługi ComboBox. Do dyspozycji jest jednak kilka dodatkowych właściwości, które pozwalają na obsługę sytuacji, kiedy na liście znajdzie się zaznaczonych wiele elementów. Te dodatkowe właściwości zostały przedstawione poniżej w tabeli: Typ Nazwa Znaczenie bool MultiColumn Określa, czy elementy listy mogą być wyświetlane w wielu kolumnach. bool ScrollAlwaysVisible Określa, czy pasek przewijania ma być stale widoczny. SelectedIndex -> Collection SelectedIndices Lista zawierająca indeksy wszystkich zaznaczonych elementów. SelectedIndex -> Collection SelectedItems Lista zawierająca wszystkie zaznaczone elementy. SelectionMode SelectionMode Określa sposób, w jaki będą zaznaczane elementy listy. Podstawową różnicą w stosunku do listy ComboBox, oprócz metody wyświetlania, jest oczywiście możliwość zaznaczenia więcej niż jednego elementu. Sposób, w jaki elementy będą zaznaczane, można kontrolować poprzez właściwość SelectionMode, której przypisuje się następujące wartości: - MultiSimple: może być zaznaczone wiele elementów, - MultiExtended: może być zaznaczonych wiele elementów, do zaznaczenia można używać klawiszy Shift, Ctrl i klawiszy kursora, - One: tylko jeden element może być zaznaczony - None: elementy nie mogą być zaznaczane.
Dostęp do zaznaczonych elementów uzyskuje się dzięki właściwości SelectedIndices, która zawiera indeksy wszystkich zaznaczonych elementów, oraz właściwości SelectedItems, zawierającej listę zaznaczonych elementów. Należy zwrócić uwagę, że jeżeli lista pracuje w trybie MultiSimple lub MultiExtended, właściwości SelectedIndex (indeks wybranego elementu) i SelectedItem (wybrany element) będą wskazywały dowolny z zaznaczonych elementów. Zadanie 6 Umieść w oknie aplikacji listę ListBox zawierającą kilka elementów oraz przycisk. Po kliknięciu w niego, wyświetl nazwy elementów, które zostały zaznaczone. using System; using System.Drawing; using System.Windows.Forms; public class MainForm : Form ListBox lb = new ListBox(); Button button = new Button(); public MainForm() this.width = 320; this.height = 220; this.text = "Lista elementów"; button.top = 150; button.left = (this.clientsize.width - button.width) / 2; button.text = "Kliknij mnie!"; lb.items.addrange ( new object[] "Java. Ćwiczenia praktyczne", "JavaScript. Ćwiczenia praktyczne", "SQL. Ćwiczenia praktyczne", "Ajax i PHP. Ćwiczenia praktyczne", "jquery. Ćwiczenia praktyczne" ); lb.width = 200; lb.left = (this.clientsize.width - lb.width) / 2; lb.top = (this.clientsize.height - lb.height) / 2; lb.selectionmode = SelectionMode.MultiExtended; EventHandler eh = new EventHandler(this.OnButtonClick); button.click += eh; this.controls.add(lb); this.controls.add(button);
public void OnButtonClick(Object sender, EventArgs e) string str = ""; foreach (string name in lb.selecteditems) str += " '" + name + "'\n"; MessageBox.Show("Zaznaczone elementy:\n" + str); public static void Main() Application.Run(new MainForm()); Lista jest tworzona na takiej samej zasadzie, jak w poprzednim zadaniu. Jedynie zamiast klasy CheckBox jest użyta ListBox. Dodatkowo w oknie został także umieszczony przycisk typu Button. Lista jest reprezentowana przez pole lb. Aby możliwe było zaznaczanie wielu elementów, właściwość SelectionMode otrzymała wartość SelectionMode.MultiExtended. Kliknięcie przycisku będzie powodowało wywołanie metody OnButtonClick. W jej wnętrzu znajduje się pętla foreach odczytująca wszystkie elementy właściwości SelectedItems listy lb. Wewnątrz pętli konstruowany jest ciąg znaków str składający się z tekstów zawartych w zaznaczonych pozycjach (elementów kolekcji SelectedItems). Po zakończeniu pętli ciąg znaków zapisany w str jest wyświetlany na ekranie w osobnym oknie dialogowym.