Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

C# Usuwanie itemów z listbox i list


Rekomendowane odpowiedzi

Opublikowano

Witam,

Mam problem z usuwaniem itemów z listy. Czasami gdy usuwam itemy to na listbox nazwy wszystkich itemów zamieniają się na:
Projekt.Users. Jak później dodam jeden item, lub usunę kolejny to wszystko wraca do normy, czym to może być spowodowane?

Mam coś takiego:

 

Program.cs:

    public class Users
    {
        public string name { get; set; }
    }
 
MainWindow.cs:

public List<Users> usersList = new List<Users> { };
 
Usuwanie itemów (MainWindow.cs):
            if (usersList .Any())
            {
                DialogResult dialogResult = MessageBox.Show("Czy na pewno chcesz usunąć zaznaczonych użytkowników?", "Usuwanie", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (dialogResult == DialogResult.Yes)
                {
                    if (listBox_Users.SelectedIndex != -1)
                    {
                        for (int x = listBox_Users.SelectedIndices.Count - 1; x >= 0; x--)
                        {
                            int idx = listBox_Users.SelectedIndices[x];
                            usersList .RemoveAt(idx);
                        } 
                        listBox_Users.DataSource = null;
                        listBox_Users.Items.Clear();
                        listBox_Users.DisplayMember = "name";
                        listBox_Users.DataSource = usersList ;
                    }
                }
            }
 

Dodawanie itemów (AddItems.cs):

  try
            {
                if (richTextBox_users.Text != "")
                {
                    mainWindow.listBox_Users.DataSource = null;
                    mainWindow.listBox_Users.Items.Clear();


                    string[] usersData = richTextBox_users.Text.Split('\n');
                    for (int i = 0; i < usersData.Length; i++)
                    {
                        if (usersData[i] == "")
                            continue;
                        mainWindow.usersList.Add(new Users() { name = usersData[i] });
                    }


                    mainWindow.listBox_Users.DisplayMember = "name";
                    mainWindow.listBox_Users.DataSource = mainWindow.usersList;
                    this.Dispose();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }
Dziękuję za pomoc!

 

giphy.gif

Opublikowano

Jeżeli twoja lista zawiera tylko jeden string to możesz zamienić na 

public List<string> usersList = new List<string>();

Wtedy po przypisaniu do listbox, listy masz pewność ze zostaną wyświetlone wszystkie stringi, a nie obiekty w liście

Opublikowano

Po 1:

Twoja klasa "Users" to nie żadna kolekcja tylko jeden "User" więc wypadało by zmienić nazwę tej klasy na "User".

 

Po 2:

Tworzysz listę użytkowników i nadajesz jej nazwę lista użytkowników. Brzydko napisane.. Nie ładniej poprostu napisać: "List<User> users" Po czymś takim widać że jest to lista userów, a nazwa zmiennej nazywa się użytkownicy, liczba mnoga.

string[] usersData = richTextBox_users.Text.Split('\n');

na

var splittedUsers = richTextBox_users.Text.Split('\n').ToList();
for (int i = 0; i < usersData.Length; i++)
{
    if (usersData[i] == "")
       continue;
    mainWindow.usersList.Add(new Users() { name = usersData[i] });
}

na

foreach(var eachUser in splittedUsers)
{
   if(!string.IsNullOrEmpty(eachUser))
   {
      mainWindow.usersList.Add(new Users { name = eachUser });
   }
}

Osobiście pomagam tylko na PW lub e-mail


-----------------------------------------------------------------


https://github.com/smietanka

Opublikowano

Dzięki za cenne rady. 

Co do problemu to należało zamienić te 2 linie miejscami:

mainWindow.listBox_Users.DisplayMember = "name";
                    mainWindow.listBox_Users.DataSource = mainWindow.usersList;

giphy.gif

  • 2 tygodnie później...
Opublikowano

Jeśli masz to robione poprzez WPF, to zbinduj sobie itemsSource listy do ObservableCollection - pozbędziesz się dzięki temu zabawy z odświeżaniem i usuwaniem po indexach. :)

~Aye!

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...