Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
yabloko7777
0 / 0 / 0
Регистрация: 14.04.2018
Сообщений: 41
1

Доступ к элементам формы из другого класса

29.05.2018, 09:48. Просмотров 838. Ответов 5
Метки нет (Все метки)

Приветствую, в классе Form1.cs находятся элементы формы. Так же есть класс Doing.cs, в котором находится код для взаимодействия с элементами Form1, например для добавления текста в textbox1. Как можно реализовать это взаимодействие кода из Doing.cs с textbox1 в Form1.cs?
Потому что сейчас у меня весь код в Form1 и там сливаются элементы дизайна и кода. Хочется разделить их чтобы дизайн был в Form1, а код в Doing.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.05.2018, 09:48
Ответы с готовыми решениями:

Доступ к элементам формы из другого класса C#
Всем доброго времени суток!) Возник вопрос, как получить доступ к элементам...

Как получить доступ к элементам формы из другого обычного класса (не из второй формы)
Сабж. В гугле вся инфа только про доступ из другой формы, это я знаю. А вот как...

Доступ к элементам формы из другого класса/Потока
Здравствуйте, у меня есть класс работы потоков, при выполнении метода (В...

Доступ к элементам и методам класса из другого класса
Пишу и понимаю, что создаю, наверняка, давно избитую тему, но вот уже второй...

Доступ к элементам WinForm из другого класса
Здравствуйте, вопрос. Получаю доступ к элементу формы (richTextBox), но не могу...

5
meridbt
106 / 95 / 67
Регистрация: 30.07.2013
Сообщений: 369
Завершенные тесты: 1
29.05.2018, 11:21 2
yabloko7777,

на примере таймера
Доступ к элементам формы из другого класса

Кликните здесь для просмотра всего текста

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
public partial class Form1 : Form
    {
 
        public delegate void STDelegate(Label lbl, string text);
 
        public void SetTime(Label lbl, string text)
        {
            try
            {
                if (lbl.InvokeRequired)
                {
                    STDelegate stDelegate = new STDelegate(SetTime);
                    lbl.Invoke(stDelegate, new object[] { lbl, text });
                }
                else
                {
                    lbl.Text = text;
                }
            }
            catch { }
        }
 
        public Form1()
        {
            InitializeComponent();
            Doing.TimeChanged += TimeChanged;
        }
 
        private void TimeChanged(object sender)
        {
            SetTime(label1, (string)sender.ToString());
        }
 
        private void btnStartStop_Click(object sender, EventArgs e)
        {
            btnStartStop.Text = Doing.IsStarted ? "Start" : "Stop";
            Doing.IsStarted = !Doing.IsStarted;
        }
 
        private void btnClear_Click(object sender, EventArgs e)
        {
            Doing.Time = new TimeSpan();
        }
 
    }

Кликните здесь для просмотра всего текста

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
class Doing
    {
        static TimeSpan _Time;
        static System.Timers.Timer timer;
        static bool _IsStarted;
        public delegate void TCh(object sender);
        public static event TCh TimeChanged;
 
        public static TimeSpan Time
        {
            get
            {
                return _Time;
            }
            set
            {
                _Time = value;
                TimeChanged?.Invoke(Time);
            }
        }
 
        public static bool IsStarted
        {
            get
            {
                return _IsStarted;
            }
            set
            {
                _IsStarted = value;
 
                if (value) timer.Start();
                else timer.Stop();
            }
        }
 
        static Doing()
        {
            Time = new TimeSpan(0);
            timer = new System.Timers.Timer(1000);
            timer.Elapsed += Tick;
        }
 
        private static void Tick(object sender, ElapsedEventArgs e)
        {
            Time = Time.Add(new TimeSpan(0, 0, 0, 1));
        }
    }
0
yabloko7777
0 / 0 / 0
Регистрация: 14.04.2018
Сообщений: 41
29.05.2018, 11:52  [ТС] 3
В моем случае мне надо как то изменить textbox1.text из Form1.cs в Doing.cs.
Не могли бы вы написать на моем примере?
0
meridbt
106 / 95 / 67
Регистрация: 30.07.2013
Сообщений: 369
Завершенные тесты: 1
29.05.2018, 12:08 4
yabloko7777,

в строке 4, 6 и 31 Label изменить на TextBox
1
yabloko7777
0 / 0 / 0
Регистрация: 14.04.2018
Сообщений: 41
29.05.2018, 17:28  [ТС] 5
meridbt, И все равно я жестко туплю и не понимаю что из этого кода надо вырезать. Таймер мешает очень.
Хочется увидеть чистый код на примере доступа из класса Doing в класс Form1 для изменения текста в textBox1.
Буду благодарен, если распишите)
0
Shogun31337
534 / 514 / 222
Регистрация: 02.11.2016
Сообщений: 1,538
Завершенные тесты: 2
29.05.2018, 19:22 6
Лучший ответ Сообщение было отмечено yabloko7777 как решение

Решение

Цитата Сообщение от yabloko7777 Посмотреть сообщение
Так же есть класс Doing.cs, в котором находится код для взаимодействия с элементами Form1
У Вас ошибка в архитектуре приложения! Класс модели не должен напрямую взаимодействовать с контролами. Он вообще о них ничего знать не должен. Данные, получаемые из формы передаются в виде параметров в функции, в форму отдаются возвращаемые значения. Но никаких ТextBox'ов или Button'ов в функциях класса быть не должно.

Добавлено через 5 минут
Цитата Сообщение от yabloko7777 Посмотреть сообщение
В моем случае мне надо как то изменить textbox1.text из Form1.cs в Doing.cs.
C#
1
2
3
4
5
6
7
8
9
//в классе Doing
public string DoSomething(string s)
{
     //Тут идут нужные изменения
}
 
//в классе формы
Doing d = new Doing();
textbox1.text = d.DoSomething(textbox1.text);
1
29.05.2018, 19:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.05.2018, 19:22

Доступ к элементам формы из другого потока
Хочу сделать в фоновом потоке добавление UserControl в StackPanel. Старт...

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

Как получить доступ к элементам Form1 из другого класса
Здравствуйте! Нахожусь в начальных этапах обучения языку C# и конечно возникло...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru