С Новым годом! Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/57: Рейтинг темы: голосов - 57, средняя оценка - 4.77
3 / 3 / 1
Регистрация: 05.08.2011
Сообщений: 102
1

Как добавить в коллекцию List<string> из ListBox несколько элементов

09.02.2012, 20:54. Показов 10405. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как добавить в коллекцию List из ListBox несколько слов в том случае если вхождения строки содержатся в одной из строк ListBoxa.

Т.е. есть textBox куда я ввожу исходную строку. Есть 1 ListBox в который я добавляю исходную строку из textBox. И есть 2 ListBox куда я добавляю найденную строку из 1 ListBoxa. Одна строка добавляется, а как добавить несколько строк?

Например, если я добавил Пилот, Пилотаж. То Пилот добавится, а Пилотаж нет. Как сделать чтобы и Пилотаж добавилось тоже?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
List<string> nameList;
 
            string typedString = text1.Text;
            List<string> autoList = new List<string>();
            autoList.Clear();
 
            if (nameList == null)
            {
                nameList = new List<string> 
                    {
                        "",
                    };
            }
 
            else if (nameList != null)
            {
                for (int i = 0; i < listBoxA.Items.Count; i++)
                {
                    if (listBoxA.Items[i].ToString().StartsWith(typedString))
                   {
                        nameList.Add(listBoxA.Items[i].ToString());
                    }
                    
                    if (!listBoxA.Items[i].ToString().StartsWith(typedString))
                    {
                        nameList.Clear();
                        nameList.Add(listBoxA.Items[i].ToString());
                    }
                }
            }
 
            foreach (string item in nameList)
            {
                if (!string.IsNullOrEmpty(text1.Text))
                {
                    if (item.StartsWith(typedString))
                    {
                        autoList.Add(item);
                    }
                }
            }
 
            if (autoList.Count > 0)
            {
                listBoxB.ItemsSource = autoList;
 
                listBoxB.Visibility = Visibility.Visible;
 
                listBoxB.SelectionChanged += new SelectionChangedEventHandler(listBoxB_SelectionChanged);
 
            }
            else if (text1.Text.Equals(""))
            {
                listBoxB.Visibility = Visibility.Collapsed;
                listBoxB.ItemsSource = null;
            }
            else
            {
                listBoxB.Visibility = Visibility.Collapsed;
                listBoxB.ItemsSource = null;
            }
Как сделать чтобы лишние элементы не добавлялись?

То есть сейчас во 2 listBoxB записывается если добавляю один элемент например Африка

Африка
Африка
Африка

А надо чтобы выводилось только Африка один раз а не несколько.

Если добавляю 2 элемент Австралия во 2 listBoxB записывается

Африка
Африка
Африка
Австралия
Австралия
Австралия

А надо чтобы было

Африка
Австралия

И если добавляю другой то выводить один раз другой допустим Германия а не несколько раз. Как это сделать?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Блог
09.02.2012, 20:54
Ответы с готовыми решениями:

Как присвоить DataGridView коллекцию List<String>
Есть статический класс содержащий: private static List&lt;string&gt; _customers = new List&lt;string&gt;();...

Как добавить массив в коллекцию (List)?
в чем ошибки? оно выводит всякую фигню. А когда System.out.println(x); то просто ошибка... но...

Разбить List<string> на несколько обьектов c List<string>
Задумался как я то кусочками все делить оказалось не так уж просто :scratch: List&lt;string&gt;...

Добавление строк и элементов в коллекцию для коллекций <List<List<T>
Доброго времени суток , никак не могу добавить строку в коллекцию коллекций . У меня нет...

6
55 / 55 / 5
Регистрация: 09.06.2011
Сообщений: 207
09.02.2012, 22:09 2
Цитата Сообщение от Demonicq2014 Посмотреть сообщение
Как добавить в коллекцию List из ListBox несколько слов в том случае если вхождения строки содержатся в одной из строк ListBoxa.
Как ни старался, так и не смог понять что именно Вы хотите сделать... Как-то сумбурно всё...

Но, из того что я понял Вам нужно это:

VB.NET
1
2
3
4
5
6
7
8
9
10
11
        Dim nameList As New List(Of String)
        Dim typedString As String = "Hell"
        listBoxA.Items.Add("Hello!")
        listBoxA.Items.Add("Helly")
        listBoxA.Items.Add("Hill")
 
        For Each item In listBoxA.Items
            If item.StartsWith(typedString) = True Then
                nameList.Add(item)
            End If
        Next
В коллекцию nameList добавится ровно две строки: "Hello!" и "Helly"
1
5 / 5 / 4
Регистрация: 20.01.2011
Сообщений: 350
09.02.2012, 23:35 3
Раз 7 перечитал Если я правильно понял, что хотел автор топика, то вот пример:
xaml-разметка:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<Window x:Class="ListBoxToList.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" mc:Ignorable="d" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        d:DesignHeight="0" d:DesignWidth="0" SizeToContent="WidthAndHeight">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition />
            <ColumnDefinition />
            <ColumnDefinition />
        </Grid.ColumnDefinitions>
        <ListBox x:Name="ListBoxA" Grid.Column="0" Width="100" Margin="3"></ListBox>
        <TextBox x:Name="TbTypedString" Grid.Column="1" MaxWidth="200" TextWrapping="Wrap"
                 TextChanged="TbTypedString_TextChanged" Margin="3" MinWidth="50"></TextBox>
        <ListBox x:Name="ListBoxB" Grid.Column="2" Width="100" Margin="3"></ListBox>
    </Grid>
</Window>
Код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
 
namespace ListBoxToList
{
    /// <summary>
    /// Логика взаимодействия для MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        // Список значений, которые занесем в первый ListBox
        List<string> ListBoxA_Items = new List<string>
        {
            "Евразия",
            "Азия",
            "Африка",
            "Северная Америка",
            "Южная Америка",
            "Антарктида",
            "Европа",
            "Австралия"
        };
 
        public MainWindow()
        {
            InitializeComponent();
            // Заполним первый ListBox
            this.ListBoxA.ItemsSource = ListBoxA_Items;
        }
        // Обработка ввода значений в TextBox
        private void TbTypedString_TextChanged(object sender, TextChangedEventArgs e)
        {
            // Если в первом ListBox нет значений, то не продолжаем
            if (this.ListBoxA.Items.Count == 0) return;
            // Если введеная строка пуста, то очищаем второй ListBox и не продолжаем
            if (string.IsNullOrEmpty(((TextBox)sender).Text))
            { this.ListBoxB.Items.Clear(); return; }
            // Очищаем второй ListBox
            this.ListBoxB.Items.Clear();
            // Делаем итерацию по всем значениям первого ListBox
            // Если значение нам подходит (в данном случае - также начинается)
            // и не содержится во втором списке, то добавляем его
            foreach (string item in this.ListBoxA.Items)
                if (item.ToUpper().StartsWith(this.TbTypedString.Text.ToUpper()) &
                    !this.ListBoxB.Items.Contains(item))
                    this.ListBoxB.Items.Add(item);
            // Пару пояснений!!!!!!!!:
            // 1. Я использую foreach (string item in this.ListBoxA.Items) вместо
            // foreach (ListBoxItem item in this.ListBoxA.Items) так, как заранее знаю, что я
            // заполнял его текстовыми значениями
            // 2. (item.ToUpper().StartsWith(this.TbTypedString.Text.ToUpper()) используется для того,
            // чтобы искать нужную строчку без учета регистра
        }
    }
}
0
0 / 0 / 0
Регистрация: 06.11.2012
Сообщений: 14
23.03.2013, 23:13 4
Простите, но внесу ненужную корректировку
public function StartsWith(
value : String,
ignoreCase : boolean,
culture : CultureInfo
) : boolean
ignoreCase
Тип: System.Boolean
true, чтобы не учитывать регистр при сравнении данной строки с value; в противном случае — false.
0
970 / 773 / 171
Регистрация: 12.04.2009
Сообщений: 1,700
24.03.2013, 19:22 5
за что вы так уродуете WPF?
foreach (string item in this.ListBoxA.Items)
зачем явно обращаться к элементу управления? тут все делается через биндинги и коллекции.
аж смотреть страшно...
1
64 / 72 / 1
Регистрация: 23.05.2015
Сообщений: 360
Записей в блоге: 52
30.07.2019, 00:21 6
Urs, спасибо, очень помогли вот этим кусочком кода:
Цитата Сообщение от Urs Посмотреть сообщение
VB.NET
1
2
3
4
5
For Each item In listBoxA.Items
    If item.StartsWith(typedString) = True Then
        nameList.Add(item)
    End If
Next
0
Модератор
Эксперт .NET
15854 / 11000 / 2854
Регистрация: 21.04.2018
Сообщений: 32,321
Записей в блоге: 2
30.07.2019, 00:33 7
Цитата Сообщение от mozgotron Посмотреть сообщение
Urs, спасибо, очень помогли вот этим кусочком кода:
Urs, последний раз на форум заходил два года назад....
А теме уже 7 лет...

Что же касается самого кода выбранного вами, то категорически не советую его использовать.
Если 7 лет назад, когда мало кто знал как правильно работать с WPF, такое ещё выглядело приемлемым, то сейчас это явный говнокод очень плохой метод способ обращения с WPF элементами.
0
30.07.2019, 00:33
cpp_developer
Эксперт
20123 / 5690 / 417
Регистрация: 09.04.2010
Сообщений: 12,546
Блог
30.07.2019, 00:33
Помогаю со студенческими работами здесь

Как получить коллекцию элементов ListBox
Доброго времени суток. Уважаемые подскажите. Например в textBox, если нам нужен текст который в...

Не получается добавить в коллекцию List<t>
Не могу разобраться почему вылетает исключение в 18й строке. если её заккоменитить всё...

Как добавить и вывести элементы из List<int, string> ?
В инете нашёл инфу только по обычным спискам (одного типа). Помогите, как в такой список добавить...

Как добавить List<string> в файл Settings1.settings
Вот собственно сам вопрос: Как добавить List&lt;string&gt; в файл Settings1.settings Добавлено через 3...

Как добавить несколько значений в List из DataTable using Linq
Смотрел на stackoverflow, но мне там не подошло решение, т.к. там без условия просто записывалась...

Как передать list<string> в поток и как такой же list<string> вывести из потока?
Как передать list&lt;string&gt; в поток и как такой же list&lt;string&gt; вывести из потока в richtextbox?...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru