Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 14.02.2022
Сообщений: 2

Вывод лога в listBox

20.02.2022, 17:45. Показов 858. Ответов 3

Студворк — интернет-сервис помощи студентам
Здравствуйте, у меня в одном решении есть Form1.cs и класс test.cs, в Form1 есть listBox(в моем проекте называется LogBox), сюда данные должны передаваться при выполнении метода test.cs, который вызывается в Form1.cs при клике по кнопке, но у меня никак не получается передать данные из test.cs, поскольку этот класс не видит listBox.
Знаю про существование этого поста, но мозгов применить эти отмычки к своему проекту мне пока не хватает, в каждом способе какие-то ошибки у меня.
Пытался сделать по аналогии с этой темой, тоже не получилось.

Я пытаюсь реализовать лог, когда в процессе выполнения различных методов, которые вызываются кликом по кнопке, в лог выводится информация о каждом шаге, который выполняется внутри вызванного метода, например, построчно выводится информация о том, какой файл копируется в данный момент и т.п.

Возможно подобные логи формируются каким-то другим способом, возможно даже есть специальные команды для этого, но мне о таких не известно.

На данный момент реализовал вывод в лог только информацию о начале выполнения вызванного метода, и о его завершении, поскольку все это реализуется в рамках Form1, который видит мой listBox и проблем с выводом информации тут нет.

В данный момент это выглядит в Form1.cs примерно вот так:

C#
1
2
3
4
5
6
7
8
9
10
11
12
        private void ButtonApel_Click(object sender, EventArgs e)
        {
            DateTime dateTime = DateTime.Now;
            LogBox.AppendText($"{dateTime.ToString("HH:mm:ss")}\t Начинаю копировать файлы..." + Environment.NewLine);
 
            Apel_check apel_count = new Apel_check();
            int total_apel = 0;
            apel_count.Unloading_ZRD(out total_apel);
 
            dateTime = DateTime.Now;
            LogBox.AppendText($"{dateTime.ToString("HH:mm:ss")}\t Готово. Скопировал профили с апелляциями: {total_apel} шт." + Environment.NewLine);
        }

Внутри этого метода Unloading_ZRD происходит поиск и копирование файлов, вот эту информацию пошагово в лог уже не получается вывести.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.02.2022, 17:45
Ответы с готовыми решениями:

Вывод лога в textbox
Добрый день, а может кто подсказать или ткнуть в пример реализации: необходимо постоянно мониторить папку и выводить на экран что-то типа...

Вывод лога программы в окно, а не файл
Как к программе на языке C#,(windows form) сделать лог окно. Лог программы, не нужен в отдельном файле.

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

3
 Аватар для Kazbek17
1484 / 939 / 454
Регистрация: 06.02.2012
Сообщений: 2,868
21.02.2022, 09:01
Цитата Сообщение от Bio3D Посмотреть сообщение
у меня никак не получается передать данные из test.cs, поскольку этот класс не видит listBox
А зачем передавать в класс визуальный элемент?
Создайте класс лог и строчите в него информацию, а затем считывайте с этого класса информацию. Вот например первый вариант.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class Log
{
    public static StringBuilder StrBuilder {get; set;} = new StringBuilder();
    public static void Print(string data)
    {
        StrBuilder.AppendLine(data);
    }
    
 
public static void SaveLog(string path)
{
     File.WriteAllText(path,StrBuilder.ToString());
}
}
//Пишем в любом месте лог
DateTime dateTime = DateTime.Now;
Log.Print($"{dateTime.ToString("HH:mm:ss")}\t Начинаю копировать файлы..." + Environment.NewLine);
 
 
dateTime = DateTime.Now;
Log.Print($"{dateTime.ToString("HH:mm:ss")}\t Готово. Скопировал профили с апелляциями: {total_apel} шт." + Environment.NewLine);
 
    richTextBox.Text = Log.StrBuilder.ToString();//<----- выводим инфу в визуальный элемент.
Второй вариант. Тот же класс, но добавим событие.
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
public class Log
{
    public static event Action<string> LogChanged;
 
    public static StringBuilder StrBuilder {get; set;} = new StringBuilder();
    
    public static void Print(string data)
    {
        StrBuilder.AppendLine(data);
        LogChanged?.Invoke(data);
    }
    
    public static void SaveLog(string path)
    {
        File.WriteAllText(path,StrBuilder.ToString());
    }
}
 
//************
Log.LogChanged += (args) => 
    {
               //Можно сразу вывести все
                richTextBox.Text = Log.StrBuilder.ToString();//<----- выводим инфу в визуальный элемент.
                
                // или в ходе вызова метода print
                richTextBox.AppendText(args);
    };
Добавлено через 3 минуты
Во втором варианте, где бы вы не вызвали метод Print у вас будет всегда происходить событие LogChanged.
0
0 / 0 / 0
Регистрация: 14.02.2022
Сообщений: 2
27.02.2022, 08:39  [ТС]
Не понимаю, как это должно работать. Вот, например, этот класс я объявляю на форме(Form1.cs), которая видит мой TextBox:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Log
{
    public static event Action<string> LogChanged;
 
    public static StringBuilder StrBuilder {get; set;} = new StringBuilder();
    
    public static void Print(string data)
    {
        StrBuilder.AppendLine(data);
        LogChanged?.Invoke(data);
    }
    
    public static void SaveLog(string path)
    {
        File.WriteAllText(path,StrBuilder.ToString());
    }
}
Тогда, получается, в других классах (где находятся методы, которые я вызываю на Form1.cs) я должен написать
C#
1
2
3
4
5
6
7
8
Log.LogChanged += (args) => 
    {
               //Можно сразу вывести все
                richTextBox.Text = Log.StrBuilder.ToString();//<----- выводим инфу в визуальный элемент.
                
                // или в ходе вызова метода print
                richTextBox.AppendText(args);
    };
...чтобы передавать информацию в TextBox? Видимо, я делаю что-то не так, потому что с других классов не получается обратиться к TextBox, потому что они его не видят, но если подразумевалось, что обе части этого кода я должен писать в Form1.cs, то тогда не понимаю, как потом с других классов передавать информацию в этот класс?
0
 Аватар для Kazbek17
1484 / 939 / 454
Регистрация: 06.02.2012
Сообщений: 2,868
27.02.2022, 08:54
Bio3D, класс log должен быть не в форме1, а общедоступным. Т. Е его нужно создать отдельным файлом в обозревателе решений. Тогда он будет виден везде. А форме1 вам только нужно создать событие logChanged, после из любых мест вызываете метод Print и событие будет отрабатывать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.02.2022, 08:54
Помогаю со студенческими работами здесь

Вывод лога отправки сообщения SmtpClient
Как можно вывести лог данной программы по типу - Установлено соединение с google.com - Успешный вход / неверный логин или пароль -...

Вывод лога методов и событий Default.aspx
Вопрос как осуществить при помощи свойства страницы Response (Page.Response...) вывод лога всех методов и событий страницы Default.aspx.? С...

Чтение и вывод на экран лога транзакций SQL Server
Здравствуйте. Я задался сложным вопросом: как можно прочесть и вывести на экран (например, в grid view) транзакции, записанные в лог?...

Вывод из лога
Господа, помогите разобраться имеется файл логов, в который попадает много разной ерунды, из которой нужно выловить строки...

Вывод лога в файл
Здравствуйте! Вот есть скрипт логирования\разлогирования без sql Может подскажете что еще дописать, что-бы велся еще один файл...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru