Zaznaczenie item'u w listBox'ie

0

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

0

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ć.

0
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

0

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

0

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.

0

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; }
   }
}
0

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

0

Nie używaj tablic, jeśli masz coś usuwać to do tego służą kolekcje.
Pokaż jak to zrobiłeś.

0

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?

0

w listboxie1 mam miec jakby tylko 'odnosnik', a w tablicy przechowywane dane

0

Ale po co Ci to, zamiast komplikować przyjrzyj się przykładowi od @DibbyDum.

0

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;

        }
0

Bo chyba powinno byc:

listBox1.DisplayMember = "imie";
0

nie, niestety dalej to samo :|

0

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;
}
0

imie to pole klasy Osoba i jest stringiem

0

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)

0
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

0

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)
0

Dzięki wielkie, problem rozwiązany :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1