Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
 Аватар для Бедел
235 / 31 / 11
Регистрация: 04.06.2010
Сообщений: 293

Как получить данные из списка в функции, в которой он не заполнялся ?

13.07.2014, 03:52. Показов 1812. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток, уважаемые форумчане !

Имеется список, который заполняется в одной функции циклом foreach. Имеется функция, в которой хочу использовать значения списка.

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
        public class Value
        {
            public string value = string.Empty;
        }
 
        public List<Value> val = new List<Value>();
 
        public void FilingValue()
       {
           .....
           
           foreach (Match match in matchList2)
                {
                        val.Add(new Value() { value = match.Groups[1].Value }); // Добавляем в список значение параметра
                }
          .....
       }
       public void ValueSort() // Функция, в которой планируется использовать значения списка
       {
           for (int i=0; i<n; i++)
            {
                b.ListBoxValue.Items.Add(val[i].value);
            }
       }
После выполнения этого кода в ListBoxValue ничего не записывается. Я так понимаю, это связано с тем, что после окончания цикла, где заполняется список, все его значения удаляются из памяти ?
Подскажите, как быть в данной ситуации. Какой выход посоветуете ?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.07.2014, 03:52
Ответы с готовыми решениями:

Как получить данные из выпадающего списка?
Добрый день есть выпадающий список как сделать так чтобы при выборе какого то значения в этом списке это значение выходило внизу строкой...

Вопрос по адресации в Excel: как получить данные из ячейки, адрес которой указан в другой ячейке?
Доброго дня всем. Тут такое дело - в ячейке, к примеру А1 лежит номер столбца, а в ячейке А2 - номер строки. Как получить значение из...

Можно ли как-то получить доступ к аргументам у функции у которой нет параметров?
void foo(); int main(void) { foo(123, 123, 3412); } void foo() { //can access arguments?

22
25 / 25 / 5
Регистрация: 11.11.2009
Сообщений: 56
13.07.2014, 05:46
Цитата Сообщение от Бедел Посмотреть сообщение
for (int i=0; i<n; i++)
видимо это связано с тем что n == 0
1
Заблокирован
13.07.2014, 10:10
В той функции где будете проходить по списку используйте val.count свойство.

C#
1
2
3
4
5
6
7
public void ValueSort() // Функция, в которой планируется использовать значения списка
       {
           for (int i=0; i<val.count; i++)
            {
                b.ListBoxValue.Items.Add(val[i].value);
            }
       }
В таком случае все данные перенесутся.
1
 Аватар для Бедел
235 / 31 / 11
Регистрация: 04.06.2010
Сообщений: 293
13.07.2014, 16:58  [ТС]
Butter, ExkaliBur, нет же, ребята.. Извините, что ввёл Вас в заблуждение своим циклом. Переменную n я написал просто для примера. Но спасибо за идею с val.count. Сделал следующее:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class Value
        {
            public string value = string.Empty;
        }
 
        public List<Value> val = new List<Value>();
 
        public void FilingValue()
       {
           .....
           
           foreach (Match match in matchList2)
                {
                        val.Add(new Value() { value = match.Groups[1].Value }); // Добавляем в список значение параметра
                }
          .....
       }
       public void ValueSort() // Функция, в которой планируется использовать значения списка
       {
                b.ListBoxValue.Items.Add(val.Count); // !!!!!!!!!!! Вывожу количество элементов списка !!!!!!!!!!
       }
Как вы думаете, что он вывел в ListBox ? 0 !
Это говорит как раз о том, что я писал в первом посте. Список очищается после прохождения цикла, где я его заполняю. В нём нет ни одного эелемента.
Если я выводу количество элементов списка в цикле, где я его заполняю, то есть:

C#
1
2
3
4
5
foreach (Match match in matchList2)
                {
                        val.Add(new Value() { value = match.Groups[1].Value }); // Добавляем в список значение параметра
                        b.ListBoxValue.Items.Add(val.Count);
                }
То выводится 375. (Количество элементов списка действительно 375).

Причину того, почему в функции, где я прохожусь по списку, список пуст - я понял. Теперь прошу помочь с тем, как бы сделать так, чтобы я смог использовать эти значения списка в сторонней функции.
Заранее благодарю всех за оказанную помощь.

Добавлено через 3 минуты
Подозреваю, что мне каким-то образом надо передавать в эту функцию список. Прошу совета по этому поводу.
0
147 / 73 / 17
Регистрация: 31.05.2014
Сообщений: 215
13.07.2014, 18:07
Бедел, хм странно. У меня вот так всё работает
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
class Program
    {
        static void Main(string[] args)
        {
            Value a = new Value();
            a.FilingValue();
            a.ValueSort();
        }
    }
    public class Value
    {
        public string value = string.Empty;
        public List<Value> val = new List<Value>();
        public void ValueSort() // Функция, в которой планируется использовать значения списка
        { 
            for (int i = 0; i < val.Count; i++)
            {
 
                Console.WriteLine(val.ElementAt(i));
            }
            Console.ReadLine();
        }
        public void FilingValue()
        {
            for (int i = 0; i < 100; i++)
                val.Add(new Value() { value = i.ToString() }); // Добавляем в список значение параметра
        }
        public override string  ToString()
        {
            return value;
        }
    }
1
 Аватар для Бедел
235 / 31 / 11
Регистрация: 04.06.2010
Сообщений: 293
13.07.2014, 18:22  [ТС]
rutelun, спасибо, сейчас будем разбираться. Чуть позже отпишусь о результатах.

Добавлено через 7 минут
rutelun, Ваш код у меня тоже работает так как надо. Не пойму, в чём причина. Но подозреваю, что у вас всё это выполняется в одном классе Value. У меня же ситуация немного другая.
Прошу комментариев по этому поводу.
0
147 / 73 / 17
Регистрация: 31.05.2014
Сообщений: 215
13.07.2014, 18:29
Бедел, можете сказать чем отличается? У вас вроде бы только значение добавляется из другого класса и всё.
1
 Аватар для Бедел
235 / 31 / 11
Регистрация: 04.06.2010
Сообщений: 293
13.07.2014, 18:31  [ТС]
rutelun, да это я и имел в виду. Но я не прав, это никак не влияет на результат. Переделал немного Ваш код:

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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            Pars a = new Pars();
            a.FilingValue();
            a.ValueSort();
        }
    }
    public class Pars
    {
        public class Value
        {
            public string value = string.Empty;
        }
        public List<Value> val = new List<Value>();
        public void ValueSort() // Функция, в которой планируется использовать значения списка
        {
            Console.WriteLine(val.Count);
            Console.ReadLine();
        }
        public void FilingValue()
        {
            for (int i = 0; i < 100; i++)
            {
                val.Add(new Value() { value = i.ToString() }); // Добавляем в список значение параметра
            }
        }
    }
}
Ответ: 100.
Программа отрабатывает чётко. Не пойму, в чём у меня проблема..
0
147 / 73 / 17
Регистрация: 31.05.2014
Сообщений: 215
13.07.2014, 18:32
Бедел, если вы используете вложенные классы, то может быть поэтому
C#
1
2
3
4
public class Value
        {
            public string value = string.Empty;
        }
А нет не из-за этого. Сейчас тогда дальше искать буду
1
 Аватар для Бедел
235 / 31 / 11
Регистрация: 04.06.2010
Сообщений: 293
13.07.2014, 18:41  [ТС]
rutelun, что Вы подразумеваете под этим ? Скину весь код в таком виде, в каком он есть. Может, проблема вовсе в другом.

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
public class Pars : Form1
{
    public class Value
    {
        public string value = string.Empty;
    }
    public List<Value> val = new List<Value>(); // Создаем список для значений
    public void FilingParametrs(string filepath, int filecount, Form1 b) // Функция для заполнения ListBox'a списком параметров и их значений
    {
        string xml = System.IO.File.ReadAllText(filepath); // Считываем текущий документ в строку
        Regex regex = new Regex(@"[<](?<nodeName>\w+)\s+(?=value)"); // Ищем значения по маске регулярного выражения
        MatchCollection matchList2 = Regex.Matches(xml, @"value = ""([^/]+)"""); // Формируем лист со значениями
        b.CountParametrs.Text = Convert.ToString("Количество параметров: " + j); // Выводим количество параметров
        k = 0;
        foreach (Match match in matchList2)
        {
            if (b.ListBoxValue.Items.Count != b.ListBoxParametrs.Items.Count * filecount) // Условие, которое заполняет ListBox со значениями до тех пор, пока количество значений не будет равно количеству параметров умноженному на количество файлов
            {
                val.Add(new Value() { value = match.Groups[1].Value }); // Добавляем в список значение параметра
                k++;
            }
        }
    }
    public void ValueSort(Form1 b)
    {
        b.ListBoxValue.Items.Add(val.Count);
    }
}
C#
1
2
3
4
5
6
7
8
9
10
11
12
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }
    public void ListBoxParametrs_SelectedIndexChanged(object sender, EventArgs e)
    {
        Pars pars = new Pars();
        pars.ValueSort(this);
    }
}
Добавлено через 2 минуты
Понимаю, тяжело будет вникнуть в некоторые строки и понять их логику, так как Вы не видите всего проекта. Но не суть. Главное, чтобы Вы видели, где заполняется список и где я хочу его использовать.
0
147 / 73 / 17
Регистрация: 31.05.2014
Сообщений: 215
13.07.2014, 18:48
Ок, сейчас посмотрю

Добавлено через 6 минут
Бедел,
C#
1
2
3
4
5
public void ValueSort(Form1 b)
    {
       Pars pars = new Pars();
            pars.ValueSort(this);
    }
а где вызов pars.FilingValue();?
1
 Аватар для Бедел
235 / 31 / 11
Регистрация: 04.06.2010
Сообщений: 293
13.07.2014, 18:53  [ТС]
rutelun, давайте я скину Вам весь проект, Вам так будет легче. Вызываю его чуть выше. Просто не показал этого в листинге.

Проект.rar
0
 Аватар для Бедел
235 / 31 / 11
Регистрация: 04.06.2010
Сообщений: 293
13.07.2014, 18:57  [ТС]
rutelun, укажите путь к папке с файлами xml. Он загрузит всё в LIstBox'ы. Далее кликните на какой-нибудь параметр в первой колонке. Во второй колонке должно появиться количество элементов списка.
0
147 / 73 / 17
Регистрация: 31.05.2014
Сообщений: 215
13.07.2014, 19:14
Бедел, у меня сразу ошибка. Необработанное исключение типа "System.ArgumentOutOfRangeException" в System.Windows.Forms.dll

Дополнительные сведения: Значение '1' недопустимо для 'Value'. 'Value' должно лежать в диапазоне от 'minimum' до 'maximum'.
0
 Аватар для Бедел
235 / 31 / 11
Регистрация: 04.06.2010
Сообщений: 293
13.07.2014, 19:20  [ТС]
rutelun, на какой строке выдаёт ошибку ? Какую студию используете ? У меня 10-я.

Добавлено через 4 минуты
Компилирую тот проект, который скинул вам. Всё запускается и работает..
Попробуйте уже скомпилированный *.exe запустить из Debug.
0
147 / 73 / 17
Регистрация: 31.05.2014
Сообщений: 215
13.07.2014, 19:22
Бедел, это я маску не заметил и на своих файлах проверить пытался)
0
 Аватар для Бедел
235 / 31 / 11
Регистрация: 04.06.2010
Сообщений: 293
13.07.2014, 19:23  [ТС]
rutelun, это он ругается на ProgressBar. Вы, видимо, неправильно указали путь к папке stat. Кликните Обзор и укажите путь к папке stat, где будут лежать распакованные xml-файлы.

Добавлено через 38 секунд

Не по теме:

Цитата Сообщение от rutelun Посмотреть сообщение
Бедел, это я маску не заметил и на своих файлах проверить пытался)
бывает :)

0
147 / 73 / 17
Регистрация: 31.05.2014
Сообщений: 215
13.07.2014, 19:30
Лучший ответ Сообщение было отмечено Бедел как решение

Решение

Бедел, нашёл вашу ошибку - вы объявили pars внутри метода, а не класса
C#
1
2
3
private void Обзор_Click(object sender, EventArgs e)
        {
            pars = new Pars();
. Перенесите объявление в класс и измените ListBoxParametrs_SelectedIndexChanged на
C#
1
2
3
4
5
public void ListBoxParametrs_SelectedIndexChanged(object sender, EventArgs e)
        {
           // ListBoxValue.Items.Clear(); 
            pars.ValueSort(this);
        }
1
 Аватар для Бедел
235 / 31 / 11
Регистрация: 04.06.2010
Сообщений: 293
13.07.2014, 19:35  [ТС]
rutelun, спасибо большое, это уже неплохо) Но у меня в таком случаете проект не компилируется.. Пишет, если не ошибюсь, что переполнение стэка.
Надо переделать вот так, я правильно Вас понял ?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }
    Pars pars = new Pars();
    private void Обзор_Click(object sender, EventArgs e)
    {
        ....
    }
 
    public void ListBoxParametrs_SelectedIndexChanged(object sender, EventArgs e)
    {
        // ListBoxValue.Items.Clear();
        pars.ValueSort(this);
    }
}
Добавлено через 23 секунды
В таком случае выдаёт: Необработанное исключение типа "System.StackOverflowException" произошло в Statistics.exe
0
147 / 73 / 17
Регистрация: 31.05.2014
Сообщений: 215
13.07.2014, 19:39
Бедел, не совсем. Инициализация переменной остается на месте.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.07.2014, 19:39
Помогаю со студенческими работами здесь

Как получить доступ к элементам массива, вне предела функции, в которой создан массив?
Вопрос в топике. namespace q { public partial class Form1 : Form { private void CandleStick_Load(object...

Как получить данные из функции. ci_e_setting()
Всем привет. Есть шаблон, у которого в настройках указывается телефон в удобочитаемом виде &quot;+7 900 000-00-00&quot;, выводится он...

Как получить данные из callback функции
Есть функция которая парсит данные с сайта. Как вернуть эти данные и присвоить их переменной. НАпример я хочу сделать var data =...

Как получить полученные json данные из вне функции
Есть файл json.php, который генерирует json данные такого вида: json.php есть файл которые принимает данные и обрабатывает. в...

Как получить данные из другой таблицы внутри триггерной функции
Добрый день. Нужна помощь в создании триггерной функции на PL/pgSQL Задача у меня следующая: При изменении определенной...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru