Witam. Chciałbym stworzyć pustą listę, która będzie uzupełniana o to co zostanie wpisane przez użytkownika a później wyświetlona ale zupełnie nie wiem jak powinienem się za to zabrać, kiedy korzystam z funkcji list.add() program zwraca jedynie "System.Collections.Generic.List`1[System.String]" w miejscu, w którym powinno wyświetlać się coś co powinien wpisać użytkownik.
Niech zgadnę, zrobiłeś lista.ToString()
albo Console.WriteLine(lista)
? Aby wyciągnąć elementy z listy potrzebujesz pętli (for
lub foreach
) po tych elementach.
for(int i = 0; i < lista.Count; i++)
{
string element = lista[i];
Console.WriteLine(element);
}
// LUB
foreach(string element in lista)
{
Console.WriteLine(element);
}
#EDIT
Samym string
nie jesteś w stanie tego ogarnać. Zrób klasę Produkt
i ten element wrzucaj do listy.
public class Produkt
{
public string Nazwa {get;set;}
public int Ilosc {get;set;}
}
I dalej w programie, w odpowiednim miejscu robisz:
List<Produkt> lista = new List<Produkt>();
// Dodawanie
Produkt produkt = new Produkt();
produkt.Nazwa = "Mleko";
produkt.Ilosc = 2;
if(lista.Any(x=>x.Nazwa == produkt.Nazwa))
{
Produkt elementListy = lista.FirstOrDefault(x=>x.Nazwa == produkt.Nazwa);
elementListy.Ilosc += produkt.Ilosc;
}
else
{
lista.Add(produkt);
}
Ciężko cokolwiek z sensem napisać skoro nie wiem co masz i jak masz. Ja bym to zrobił tak. Na tym poziomie ci to wystarczy. Przyzwyczajaj się do klas.
To kod, który odpowiada za pobieranie informacji od użytkownika o nazwie i ilości produktu, które chciałby dodać do swojej listy zakupów. Chciałbym żeby program sprawdzał czy dany element znajduje się już w polu richTextBox i jeśli tak, jedynie zwiększył jego ilość zamiast po raz kolejny przepisywać, podobno w tym celu powinienem stworzyć listę. Tak więc moim pytaniem jest jak stworzyć pustą listę do której dopisywane byłyby nazwy podane przez użytkownika
void Button1Click(object sender, EventArgs e)
{
string new_product;
decimal quantity;
// Nazwa produktu wpisana przez użytkownika
new_product = textBox1.Text;
//Ilość sztuk danego produktu które użytkownik chce wprowadzić do listy
quantity = numericUpDown1.Value;
//if zapobiegający dodaniu spacji jako produktu do listy
if(string.IsNullOrWhiteSpace(textBox1.Text))
{
MessageBox.Show("Podaj nazwę produktu.", "Błąd", MessageBoxButtons.OK,MessageBoxIcon.Information);
}
//if zapobiegający dodaniu do listy produktu w ilości 0szt
else if(quantity <= 0)
{
MessageBox.Show("Podaj prawidłową ilość produktu: " + new_product + ".", "Błąd", MessageBoxButtons.OK,MessageBoxIcon.Information);
}
//Dodanie do listy produktu wpisanego przez użytkownika, w podanego przez niego liczbie.
else
{
//nadanie numeru produktowi na liście
add_click++;
richTextBox1.AppendText(add_click.ToString() + "." + new_product + " - " + Convert.ToString(quantity) + "." + "\n");
}
//wyczyszczenie pola do wprowadzania produktu oraz jego ilości
textBox1.Clear();
numericUpDown1.Value = 0;
}
Po pierwsze, klasa. Zawsze. Jeśli chcesz mieć liczby niecałkowite to zmieniasz Ilosc
z int
na decimal
public class Produkt
{
public string Nazwa {get;set;}
public decimal Ilosc {get;set;}
}
A "najciekawsze" jest add_click++;
. Skąd wy młodziaki bierzecie takie cuda?
Nie używa się RichTextBox
do wyświetlania listy. Użyj do tego celu DataGridView
i listę ustaw jako DataSource
public partial class Form1 : Form
{
BindingList<Produkt> listaZakupow = new BindingList<Produkt>();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
dataGridView1.DataSource = listaZakupow;
}
void Button1Click(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(textBox1.Text) || !string.IsNullOrWhiteSpace(textBox1.Text))
{
if (numericUpDown1.Value > 0)
{
Produkt produkt = new Produkt();
produkt.Nazwa = textBox1.Text;
produkt.Ilosc = numericUpDown1.Value;
textBox1.Clear();
numericUpDown1.Value = 0;
listaZakupow.Add(produkt);
}
else
{
MessageBox.Show("Podaj prawidłową ilość produktu: " + new_product + ".", "Błąd", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
else
{
MessageBox.Show("Podaj nazwę produktu.", "Błąd", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}