Przeszukałem dużo stron i nie mogę znaleźć lub może nie wiedziałem jak użyć metody do zaznaczenia item'u w listBox'ie. Chodzi mi o to, że dodałem do tablicy zczytane z textBox'ow dane i jeden z nich zawsze też dodaję do listBox'a. Np wpisuje do jednego textboxa imię, do drugiego np nr tel itd i dodaje to do tablicy. Utworzona jest oczywiście klasa i tablica jest typu klasy. I imię dodaje tez do listBoxa żeby mieć jakby 'odnośnik' i mam np 3 itemy w listoboxie powiedzmy Marysia, Zosia, Asia i jak kliknę na Zosia a potem na button Wyświetl chciałbym, żeby w jednym textboxie wyskoczyło jej imię, w drugim nr tel itd, czyli wszystkie te wartości które były wpisane i dodane do tablicy. Nie mogę tego nigdzie znaleźć a jak coś znalazłem to nie działało. Dokładnie chodzi o wyświetlenie wartości kryjących się pod zaznaczonym itemem
Zaznaczenie item'u w listBox'ie
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Polska, Kraków
Pokaż jak dodajesz do listBoxa i jak wyciągasz. A tak naprawdę wszystkie potrzebne przykłady są tutaj: http://msdn.microsoft.com/pl-pl/library/system.windows.forms.listbox(v=vs.110).aspx wystarczy poklikać.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 36
listBox1.Items.Add(lista[i].imie)
tak dodaję. I nie mam pojęcia jak zrobić, żeby jak zaznaczę to imię w listBoxie i kliknę Wyświetl to w trzech innych textBoxach wyswietlilo się właśnie imię, nazw i tel, bo za każdym razem wyświetla mi tylko pierwszy item z listBoxa
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Polska, Kraków
Dodawaj całą klasę a nie tylko imię do listy:
listBox.Items.Add(new Person {Name = "Jan", LastName = "Kowalski", Phone = "+48 555 777 666"});
Ustaw co ma być wyświetlane na liście:
listBox.DisplayMember = "Name";
Wyciągaj wartości za pomocą SelectedItem to już @_13th_Dragon podał.
var person = listBox.SelectedItem as Person;
http://msdn.microsoft.com/pl-pl/library/system.windows.forms.listcontrol.datasource(v=vs.110).aspx
dodanie znaczników <code class="csharp"> - @furious programming
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Łuków
- Postów: 177
Pokażę ci na przykładzie listy.
{
int n = FBaza.Items.Count - 1;
for ( int h = 0; h <= n; h++ )
{
if (FBaza.GetSelected(h))
{
FNumer.Text = h.ToString();
FImie.Text = ListaOsob[h].imie;
FTel.Text = ListaOsob[h].tel.ToString();
FRok.Text = ListaOsob[h].rok.ToString();
}
}
Pozdrawiam.
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Polska, Kraków
Kompletnie bez sensu czemu przechodzisz cała listę sprawdzając który element jest zaznaczony zamiast wziąć od razu ten właściwy? Przekombinowałeś. Pokażę bez użycia GetSelected():
using System;
using System.Collections.ObjectModel;
using System.Windows.Forms;
namespace WindowsFormsApplicationTest
{
public partial class Test : Form
{
public Test()
{
InitializeComponent();
listBox.Items.Add(new Person {Name = "Jan", LastName = "Kowalski", Phone = "+48 555 777 666"});
listBox.Items.Add(new Person {Name = "Janusz", LastName = "Nowak", Phone = "+48 333 777 666"});
listBox.Items.Add(new Person { Name = "Ana", LastName = "Januszewska", Phone = "+48 999 777 666" });
/*
// Lub...
listBox.DataSource = new ObservableCollection<Person>
{
new Person {Name = "Jan", LastName = "Kowalski", Phone = "+48 555 777 666"},
new Person {Name = "Janusz", LastName = "Nowak", Phone = "+48 333 777 666"},
new Person {Name = "Ana", LastName = "Januszewska", Phone = "+48 999 777 666"}
};
*/
listBox.DisplayMember = "Name";
}
// Chciałeś wyświetlanie po kliknięciu przycisku to masz. :P
private void buttonShow_Click(object sender, EventArgs e)
{
var person = listBox.SelectedItem as Person;
if (person != null)
{
textBoxName.Text = person.Name;
textBoxLastName.Text = person.LastName;
textBoxPhone.Text = person.Phone;
}
}
}
public class Person
{
public string Name { get; set; }
public string LastName { get; set; }
public string Phone { get; set; }
}
}
- Rejestracja: dni
- Ostatnio: dni
- Postów: 36
Ok, jakoś sobie poradziłem, ale mam inny problem. Wszystko to dodaje do tablicy a tylko imię pojawia się w listBoxie tak jak chciałem. Ale jak usunąć cały 'rekord' z tablicy i imie z listBoxa? Wiem, że trzeba poprzedni element nadpisać kolejnym, ale coś nie działa. Z listBoxa robie listBox1.Items.Clear() i potem od nowa robię z uaktualnionej tablicy, ale nie działa mi te 'usuwanie', więc nie wiem czy Clear'em jest dobrze
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Warszawa
- Postów: 1589
Nie używaj tablic, jeśli masz coś usuwać to do tego służą kolekcje.
Pokaż jak to zrobiłeś.
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Gorlice
A po co chcesz mieć te same dane w dane w tablicy i w ListBox? Przecież chyba w samym ListBox Ci wystarczy tam możesz dodawać, usuwać i modyfikować te dane. Czego więcej Ci potrzeba?
- Rejestracja: dni
- Ostatnio: dni
- Postów: 36
w listboxie1 mam miec jakby tylko 'odnosnik', a w tablicy przechowywane dane
- Rejestracja: dni
- Ostatnio: dni
cześć, robiłem podobny program i mam taki problem że po dodaniu osoby do listboxa w listbox wyświetla się
WindowsFormsApllication1.Form1+Osoba
poza tym wszystko działa
kod dodawania osoby wygląda tak
private void Dodaj_Click(object sender, EventArgs e)
{
Osoba os = new Osoba();
{
os.imie = textBox1.Text;
os.numer = textBox2.Text;
os.rok = textBox3.Text;
}
listBox1.Items.Add(os);
textBox1.Text = " ";
textBox2.Text = " ";
textBox3.Text = " ";
listBox1.DisplayMember = os.imie;
}
- Rejestracja: dni
- Ostatnio: dni
- Postów: 475
Bo chyba powinno byc:
listBox1.DisplayMember = "imie";
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Warszawa
- Postów: 1589
Nie jestem pewny ale możliwe że imie musi być właściwością a z polem klasy to nie działa. Co to jest u Ciebie?
Ewentualnie możesz nadpisać ToString w klasie Osoba.
public override ToString()
{
return name;
}
- Rejestracja: dni
- Ostatnio: dni
no to w ToString klasy Osoba piszesz
return Imie;
Imie musi być propertem, nie polem żeby można było skorzystać z kodu powyżej, duże / małe litery mają znaczenie (propert powinien być z dużej)
- Rejestracja: dni
- Ostatnio: dni
akwamorela napisał(a):
Imie musi być propertem, nie polem żeby można było skorzystać z kodu powyżej, duże / małe litery mają znaczenie (propert powinien być z dużej)
miałem na myśli skorzystanie z DisplayMember
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Warszawa
- Postów: 1589
Więc spróbuj zamienić to pole na właściwość, czyli:
public string imie {get;set;} // a w zasadzie to powinno być Imie (z dużej litery)