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

Запись в TextBox из другого класса

08.12.2015, 22:10. Показов 19621. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как использовать textbox1, который находится в стандартном Form1 в другом статическом классе?
Пробовал сделать его паблик и через экземпляр формы обратиться к нему, но это неправильно.
C#
1
2
3
4
5
6
7
        
public static void Errors()
        {
            Form1 f = new Form1();
            f.textBox1.Text += string1;
            f.textBox1.Text += string2;
        }
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.12.2015, 22:10
Ответы с готовыми решениями:

DataGridView и TextBox из другого класса
как мне обращаться к элементам DataGridView и textBox на форме с другого класса? сделал его публичным

Доступ к TextBox в WPF из другого класса
Привет! Есть Microsoft Visual C# 2010, WPF. Есть public partial class MainWindow : Window. В нем есть TextBox. В другом файле...

Как из другого класса послать текст в textBox?
Здравствуйте) Вопрос очень простой, хоть внизу и много строк: Как из другого класса послать текст в текстбох? Т.е есть обработчик...

22
67 / 33 / 2
Регистрация: 11.10.2011
Сообщений: 128
09.12.2015, 11:47
Вы с какой целью это делаете? Это нарушение принципа инкапсуляции.

Если вы пишите логи в это окно, то они организовываются по другому принципу.
0
0 / 0 / 0
Регистрация: 11.11.2013
Сообщений: 47
09.12.2015, 13:02  [ТС]
Статический класс обрабатывает входные данные и в случае нахождения ошибок на каком-то шаге обработки, сразу же сообщает об этом. Как это можно реализовать?
0
0 / 0 / 0
Регистрация: 11.11.2013
Сообщений: 47
11.12.2015, 18:00  [ТС]
апп
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18304 / 14228 / 5368
Регистрация: 17.03.2014
Сообщений: 28,902
Записей в блоге: 1
12.12.2015, 01:42
nautilus209, передавай экзмепляр TextBox в этот класс или используй события. Или еще лучше - не привязывайся к UI. Пусть твой класс сообщает что данные неверные. А как на это реагировать пусть решают другие классы.
0
0 / 0 / 0
Регистрация: 11.11.2013
Сообщений: 47
13.12.2015, 17:13  [ТС]
OwenGlendower, как передать экземпляр TextBox в этот класс?
Не могли бы вы привести пример реализации?
Привязывать к UI приходится, т.к. данный textBox1 обязан показывать ошибки пользователю. Код достаточно большой и мне не хотелось бы записывать логи в отдельный массив.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18304 / 14228 / 5368
Регистрация: 17.03.2014
Сообщений: 28,902
Записей в блоге: 1
13.12.2015, 17:23
nautilus209, точно так же как передается любая другая переменная - через аргументы:
C#
1
2
3
4
5
6
7
8
public static void Errors(TextBox textbox)
{
    textBox.Text += string1;
    textBox.Text += string2;
}
 
// Вызов из формы
SomeClass.Errors(textbox1);
0
0 / 0 / 0
Регистрация: 11.11.2013
Сообщений: 47
13.12.2015, 17:51  [ТС]
Так мне его надо вызывать не в классе формы, а в других статических классах.
Пробовал сделать с передачей через аргументы - ничего туда не выводится (окно textbox пустое).
C#
1
2
3
4
5
6
7
8
9
10
11
    public static class Analyze
    {
        public static Form1 f = new Form1();
        public static void Check()
        {
            if (...)
            {...}
                else
                f.Errors(f.textBox1);
        }
    }
Что с этим можно сделать то?
0
2 / 2 / 3
Регистрация: 13.12.2015
Сообщений: 49
13.12.2015, 20:34
зачем передавать f.textBox1 ??? в f.Errors(f.textBox1);

просто вызываем f.Errors("что хотим добавить");

т.е. передаем string а не объект textBox1


в классе form
C#
1
2
3
4
5
6
public static void Errors(string string1)
        {
            
            textBox1.Text += string1;
          
        }
0
0 / 0 / 0
Регистрация: 11.11.2013
Сообщений: 47
13.12.2015, 21:58  [ТС]
dav1977, я уже так делал. После выполнения данной функции в текстбокс ничего не добавляется.
0
2 / 2 / 3
Регистрация: 13.12.2015
Сообщений: 49
14.12.2015, 10:07
Цитата Сообщение от nautilus209 Посмотреть сообщение
dav1977, я уже так делал. После выполнения данной функции в текстбокс ничего не добавляется.
ну если из класса формы через кнопку все добавляется,
а из другого потока не добавляется, значит "висит" другой поток
0
 Аватар для Рядовой
1524 / 914 / 329
Регистрация: 17.05.2015
Сообщений: 3,438
14.12.2015, 11:00
nautilus209, вот как это должно быть, код рабочий.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public partial class Form1 : Form
    {
        Analyze z = new Analyze();
        public Form1()
        {
            InitializeComponent();
            if (!z.Check())
                textBox1.Text = "qwerty";
        }
    }
    public class Analyze
    {
        bool Flag = false;
        public bool Check()
        {
            if (Flag) return true;
            else return false;
        }
    }
0
 Аватар для Евгений В
912 / 672 / 134
Регистрация: 01.03.2010
Сообщений: 1,279
14.12.2015, 11:00
Цитата Сообщение от nautilus209 Посмотреть сообщение
Статический класс обрабатывает входные данные и в случае нахождения ошибок на каком-то шаге обработки, сразу же сообщает об этом. Как это можно реализовать?
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 partial class Form1 : Form
    {         
        public Form1()
        {
            InitializeComponent();
            Analyze.EventError += new EventHandler(Analyze_EventError); //    подписываемся на событие EventError. Если оно произойдет, то запустить метод (Analyze_EventError).
            Analyze.Check();          
        }
 
        void Analyze_EventError(object sender, EventArgs e)
        {
            textBox1.Text = Analyze.MsgError;
        }
    }
 
 
    public static class Analyze
    {
        public static event EventHandler EventError;
        public static string MsgError { get; set; }
 
        public static void Check()
        {
            MsgError = "error";
            if (EventError != null)
                EventError(null, null);  // запускаем подписчиков на событие        
        }
    }
0
0 / 0 / 0
Регистрация: 11.11.2013
Сообщений: 47
14.12.2015, 23:34  [ТС]
Евгений В, не получается переделать под мой код. У меня там в одном статическом классе два паблик поля типа инт, они и хранят информацию об ошибках на текущий момент выполнения анализа. И есть другие статические классы, которые также выполняют анализ и используют вот эти два поля. Если что-то во время анализа не так, то сразу же надо передать значения этих полей в текстбокс. Все это работает, если вместо текстбокса сделать MessageBox.Show(firstField, secondField), но это не удобно, надо чтобы логи выводились последовательно (в текстбокс) во время работы программы.
Как это можно реализовать, сделав только один метод в клаcсе Form1 для распечатки логов, вызывая в других классах?
0
 Аватар для Евгений В
912 / 672 / 134
Регистрация: 01.03.2010
Сообщений: 1,279
15.12.2015, 00:33
Цитата Сообщение от nautilus209 Посмотреть сообщение
Как это можно реализовать
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
 public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            Analyze.EventError += new EventHandler(Analyze_EventError); // подписываемся на событие EventError. Если оно произойдет, то запустить метод (Analyze_EventError).
            Analyze1.Check(); // или Analyze2.Check();
   
        }
 
        void Analyze_EventError(object sender, EventArgs e)
        {
            textBox1.Text = string.Format("{0}, {1}", Analyze.MsgError1.ToString(), Analyze.MsgError2.ToString());
        }
    }
 
    public static class Analyze
    {
        public static event EventHandler EventError;
        public static int MsgError1 { get; set; }
        public static int MsgError2 { get; set; }
 
        public static void Check()
        {
            if (EventError != null)
                EventError(null, null);  // запускаем подписчиков на событие        
        }
    }
 
    public static class Analyze1
    {
        public static void Check()
        {
            Analyze.MsgError1 = 100;
            Analyze.MsgError2 = 88;
            Analyze.Check();
       
        }
    }
 
    public static class Analyze2
    {
        public static void Check()
        {
            Analyze.MsgError1 = 10;
            Analyze.MsgError2 = 8;
            Analyze.Check();
 
        }
    }
0
0 / 0 / 0
Регистрация: 11.11.2013
Сообщений: 47
15.12.2015, 00:52  [ТС]
Евгений В, спасибо. У меня куча подобных функций типа Check, которые проверяют разные вещи и должны распечатывать значение этих двух полей в случае необходимости. Так вот, эти функции надо будет вызывать в конструкторе Form1?
0
 Аватар для Евгений В
912 / 672 / 134
Регистрация: 01.03.2010
Сообщений: 1,279
15.12.2015, 05:49
Лучший ответ Сообщение было отмечено nautilus209 как решение

Решение

Цитата Сообщение от nautilus209 Посмотреть сообщение
Так вот, эти функции надо будет вызывать в конструкторе Form1?
Это как хотите.
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
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            Analyze.EventError += new EventHandler(Analyze_EventError); // подписываемся на событие EventError. Если оно произойдет, то запустить метод (Analyze_EventError).              
        }
 
        void Analyze_EventError(object sender, EventArgs e)
        {
            textBox1.Text = string.Format("{0}, {1}", Analyze.MsgError1.ToString(), Analyze.MsgError2.ToString());
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            A a = new A();
            a.B();
        }
    }
 
    public class A
    {
        public void B()
        {
            Analyze1.Check();
        }
    }
       
    public static class Analyze
    {
        public static event EventHandler EventError;
        public static int MsgError1 { get; set; }
        public static int MsgError2 { get; set; }
 
        public static void Show()
        {
            if (EventError != null)
                EventError(null, null);  // запускаем подписчиков на событие        
        }
    }
   
    public static class Analyze1
    {
        public static void Check()
        {
            Analyze2.Check();     
        }
    }
 
    public static class Analyze2
    {
        public static void Check()
        {
            Analyze.MsgError1 = 10;
            Analyze.MsgError2 = 8;
            Analyze.Show();
        }
    }
1
0 / 0 / 0
Регистрация: 11.11.2013
Сообщений: 47
15.12.2015, 21:52  [ТС]
Евгений В, большое вам спасибо, проблема устранена.
0
2 / 2 / 3
Регистрация: 13.12.2015
Сообщений: 49
16.12.2015, 12:43
nautilus209 Где то у вас системная проблема в вашем коде, все должно работать, как у вас в первом посте.
Хотелось бы выяснить в чем ошибка, научиться на ошибках других, чтобы не допускать в будущем.
0
0 / 0 / 0
Регистрация: 11.11.2013
Сообщений: 47
16.12.2015, 16:09  [ТС]
dav1977, как это можно выяснить? после выполнения того кода (с первого поста), текстбокс был пуст.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.12.2015, 16:09
Помогаю со студенческими работами здесь

Как передать значение одного класса в TextBox другого
Привет. Изучаю с# и сейчас застрял на одном моменте. Нужно из класса Program передать значение в TextBox. Перечитал много тем уже, пробовал...

Не могу вывести в TextBox переменную Int из другого класса
Не могу вывести в TextBox переменную Int из другого класса using System; using System.Collections.Generic; using...

ListBox / Запись из другого класса!!!
Есть class Program (Main()), class Form1 ( listBox1 ), class Class2 : Form1. Подскажите как реализовать запись в listBox1 с класса Class2....

Запись в TextBox из вызванного класса
Добрый день. Есть проект.В нем на кнопку вызываю метод из класса Server Server Server = new Server(); private void...

Как связать сигнал одного класса со слотом другого класса, содержащего указатель на объект этого класса?
Подскажите, пожалуйста, как связать сигнал одного класса со слотом другого класса, содержащего указатель на объект этого класса. Буду очень...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru