Struktury i listy w Visual Studio C#. Część 2: Operacje na liście

Materiał nawiązuje do poprzedniej lekcjii jest rozbudową poprzedniego projektu. W tym temacie zostanie poruszony problem przeglądania listy element po elemencie, przejście do wybranego elementu listy, usunięcie wybranego elementu listy oraz usunięcie całej listy.

Cel: Napisz aplikację, która na utworzonej liście danych wykona przeglądanie elementów listy oraz usuwanie wybranego elementu listy jak i całej listy

operacje na liście danych c#

Krok1. Układ komponentów

Do projektu z poprzedniego tematu dodajemy elementy ułatwiające nawigację w liście danych

Proponowane rozmieszczenie kontrolek przedstawia poniższy rysunek

Proponowane rozmieszczenie kontrolek przedstawia poniższy rysunek

Krok 2. Modyfikujemy funkcję dodaj() z poprzedniego tematu

Modyfikacja funkcji dodaj() z poprzedniego tematu będzie zawierać wartość bieżącego indeksu listy.

Deklarujemy prywatną zmienną do przechowywania bieżącego indeksu

public partial class Form1 : Form
{
private Dane d;
private List<Dane> lista = new List<Dane>();
private int idBiezacy = 0;

Modyfikujemy funkcję dodaj() do poniższej postaci

private void dodaj()
{
czyscDana();
d.nazwisko = textBox1.Text;
d.imie = textBox2.Text;
d.klasa = textBox3.Text;
lista.Add(d);
idBiezacy = lista.Count - 1;
}

Krok 3. Piszemy funkcję ustawiającą przeglądanie danych na bieżący element listy

Podstawą działania przeglądania listy jest uniwersalna funkcja odczytująca dane dowolnego elementu listy- rekordu listy. Pamiętamy, że naszymi elementami są dane oparte na zdefiniowanej strukturze w poprzednim temacie.

Nasza funkcja odczytując dane z dowolnego indeksu będzie o dwóch argumentach. Pierwszym argumentem jest indeks elementu, drugim parametrem jest kontrolka typu TextBox (w kontrolce tej będzie pokazywany odczytany rekord danych)


private void pokazRekord(int id, TextBox tb)
{
if (id < 0 || id > lista.Count-1) return;
d = lista[id];
tb.Clear();
tb.AppendText((id+1).ToString() + Environment.NewLine);
tb.AppendText(d.nazwisko + Environment.NewLine);
tb.AppendText(d.imie + Environment.NewLine);
tb.AppendText(d.klasa + Environment.NewLine);
}

Wywołanie powyższej funkcji zrealizujemy w zdarzeniu Click kontrolki Button

private void button3_Click(object sender, EventArgs e)
{
pokazRekord(idBiezacy, textBox4);
}

Sprawdź efekt działania aplikacji (na tym etapie utworzonego kodu wynikiem jest zwsze ostatni dopisny rekord danych do listy)

bieżący rekord listy c#

Krok 4. Metoda ustawiająca przeglądanie listy na pierwszy element

Rozwiązanie tego problemu jest proste. Wystarczy przypisać bieżący indeks na wartość zero i wywołać naszą funkcję pokazRekor.

private void button4_Click(object sender, EventArgs e)
{
//pokaz pierwszy rekord
idBiezacy = 0;
pokazRekord(idBiezacy, textBox4);
}

Sprawdź efekt działania aplikacji

przeglądanie listy na pierwszy element c#

Krok 5. Metoda ustawiająca przeglądanie listy na ostatni element

Ustawiamy bieżący indeks na ostatni element

private void button7_Click(object sender, EventArgs e)
{
//pokaz ostatni rekord
idBiezacy = lista.Count-1;
pokazRekord(idBiezacy, textBox4);
}

Sprawdź efekt działania aplikacji

ostatni element listy c#

Krok 6. Przeglądanie listy w lewo

Przez przeglądanie listy w lewo, rozumie się przeglądanie elementów od bieżącej pozycji w stronę indeksów mniejszych. Metodę przeglądania musimy zabezpieczyć przed przekroczeniem wartości bieżącego indeksu poniżej zera.

private void button5_Click(object sender, EventArgs e)
{
//pokaz kolejny rekord z lewej
idBiezacy--;
if (idBiezacy < 0) idBiezacy = 0;
pokazRekord(idBiezacy, textBox4);
}

Sprawdź efekt działania aplikacji

przeglądanie listy w lewo c#

Krok 7. Przeglądanie listy w prawo

Przez przeglądanie listy w lewo, rozumie się przeglądanie elementów od bieżącej pozycji w stronę indeksów większych. Metodę przeglądania musimy zabezpieczyć przed przekroczeniem wartości bieżącego indeksu powyżej górnego zakresu.


private void button6_Click(object sender, EventArgs e)
{
//pokaz kolejny rekord z prawej
idBiezacy++;
if (idBiezacy >lista.Count-1) idBiezacy = lista.Count - 1;
pokazRekord(idBiezacy, textBox4);
}

Sprawdź efekt działania aplikacji

Krok 8. Przeglądanie dowolnego elementu listy

Przeglądanie dowolnego elementu listy możemy zrealizować w zdarzeniu zwolnienia klawisza edycyjnego w kontrolce TextBox. Zakładamy, że nie będziemy wprowadzać wartości innych niż z klawiszy numerycznych


private void textBox5_KeyUp(object sender, KeyEventArgs e)
{
if (textBox5.Text.Length < 1)
{
idBiezacy = 0;
textBox5.Text = "1";
}
else
{
idBiezacy = Convert.ToInt16(textBox5.Text) - 1;
}
pokazRekord(idBiezacy, textBox4);
}

Sprawdź efekt działania programu

bieżący element listy c#

Krok 9. Usunięcie bieżącego elementu z listy

Usuwanie bieżącego elemntu listy polega na wywołaniu funkcji RemoveRange z klasy List. Jest to funkcja dwuargumentowa. Pierwszym argumentem jest indeks elementu usuwanego, drugim jest ilość usuwanych elementów. private void button10_Click(object sender, EventArgs e)
{
lista.RemoveRange(idBiezacy, 1);
toolStripStatusLabel1.Text = lista.Count.ToString();
}

Sprawdź efekt działania programu

Usunięcie bieżącego elementu z listy

Po usunięciu wybranego elementu można pokazać pełną zawartość listy. Usuniętego elementu nie powinno na liście być

Usuniętego elementu nie powinno na liście być

Krok 10. Usunięcie całej listy

Myślę, że kod nie wymaga wyjaśnień

private void button9_Click(object sender, EventArgs e)
{
lista.Clear();
toolStripStatusLabel1.Text = lista.Count.ToString();
}

Sprawdź efekt działania programu

wyczyść listę c#
Alkomat- wirtualny test

Alkomat- darmowa aplikacja na Androida

Pobierz ze sklepu Google Play