Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
Андрей69
2 / 2 / 1
Регистрация: 10.03.2013
Сообщений: 75
#1

Как организовать взаимодействие между объектами - C#

17.02.2015, 08:39. Просмотров 719. Ответов 9
Метки нет (Все метки)

В панели динамически создаю textBox (для примера)

C#
1
2
3
4
5
        private void button1_Click(object sender, EventArgs e)
        {
            TextBox tbx1 = new TextBox() { Parent = panel1, Dock = DockStyle.Top, Font = new Font("Arial", 16) };
            tbx1.Text = "text";            
        }
Затем, в другом методе еще один
C#
1
2
3
4
        private void button2_Click(object sender, EventArgs e)
        {
            TextBox tbx2 = new TextBox() { Parent = panel1, Dock = DockStyle.Bottom, Font = new Font("Arial", 16) };
        }
Как мне сделать tbx2.Text = tbx1.Text.

Я понимаю, что можно заранее сделать
C#
1
2
            TextBox tbx1;
            TextBox tbx2;
Но, как решить вопрос, что бы не плодить глобальные переменные? Или я зря так думаю и все так и делают?
http://www.cyberforum.ru/windows-forms/thread2113745.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.02.2015, 08:39
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как организовать взаимодействие между объектами (C#):

Как организовать взаимодействие между soap службой и winforms сервером
Всем привет! Есть приложение Winforms (серверное), на котором textbox, в...

Взаимодействие с несозданными объектами
Здравствуйте! Немного об игровой логике, а именно взаимодействии объектов....

Организовать работу с объектами разных версий
Есть иерархия классов, нескольких версий, например: Тип1v1.0 -Тип1.1v1.0 ...

Организовать взаимодействие типа клиент-сервер
Организовать взаимодействие типа клиент-сервер. Клиент делает запрос серверу на...

Организовать взаимодействие типа клиент - сервер
Организовать взаимодействие типа клиент - сервер.Клиенты подключается к первому...

9
BroDIK
86 / 86 / 51
Регистрация: 19.06.2013
Сообщений: 323
17.02.2015, 09:51 #2
Поясните, что значит "Как мне сделать tbx2.Text = tbx1.Text"
0
blackstar
112 / 112 / 42
Регистрация: 27.02.2013
Сообщений: 899
17.02.2015, 10:06 #3
Андрей69, никак не решить без глобальных перемен. Поэтому сделай вначале 2 обычные глобальные переменные string, а затем к нм присвой значение textboxов:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
        public string a1;
        public string a2;
         private void button1_Click(object sender, EventArgs e)
        {
            TextBox tbx1 = new TextBox() { Parent = panel1, Dock = DockStyle.Top, Font = new Font("Arial", 16) };
            tbx1.Text = "text"; 
            a1 =tbx1.Text;        
        }
        private void button2_Click(object sender, EventArgs e)
        {
            TextBox tbx2 = new TextBox() { Parent = panel1, Dock = DockStyle.Bottom, Font = new Font("Arial", 16) };
            tbx.Text = a1;
        }
1
BroDIK
86 / 86 / 51
Регистрация: 19.06.2013
Сообщений: 323
17.02.2015, 10:18 #4
Цитата Сообщение от Андрей69 Посмотреть сообщение
Но, как решить вопрос, что бы не плодить глобальные переменные? Или я зря так думаю и все так и делают?
Наверное, так делают все) Если хотите, можно извернуться, и искать текстбокс на форме через this.Controls
1
Андрей69
2 / 2 / 1
Регистрация: 10.03.2013
Сообщений: 75
17.02.2015, 20:35  [ТС] #5
Цитата Сообщение от BroDIK Посмотреть сообщение
Наверное, так делают все) Если хотите, можно извернуться, и искать текстбокс на форме через this.Controls
Изворачиваться, как раз я и не хочу. Хочу, что бы код был легче читаем и легче модифицировался. Для этого хотел максимально уменьшить зависимость методов от глобальных переменных.

Получается, если у меня много динамически созданных объектов, то для передачи информации друг другу мне нужно делать кучу глобальных переменных?
0
blackstar
112 / 112 / 42
Регистрация: 27.02.2013
Сообщений: 899
17.02.2015, 20:45 #6
Лучший ответ Сообщение было отмечено Андрей69 как решение

Решение

Андрей69, в массиве можешь их держать или в списке) не обязательно для каждого переменную создавать
1
Андрей69
2 / 2 / 1
Регистрация: 10.03.2013
Сообщений: 75
17.02.2015, 21:47  [ТС] #7
Цитата Сообщение от blackstar Посмотреть сообщение
в массиве можешь их держать или в списке) не обязательно для каждого переменную создавать
Создаю List<object> и кидаю туда ссылки на объекты (объекты могут бить разнотипные).
Далее достаю нужный элемент массива и беру из него информацию для другого объекта.
Я правильно понял подход?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
List<object> listObj = new List<object>();
 
        private void button1_Click(object sender, EventArgs e)
        {
            TextBox tbx1 = new TextBox() { Parent = panel1, Dock = DockStyle.Top, Font = new Font("Arial", 16) };
            tbx1.Text = "text";
            listObj.Add(tbx1); 
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            TextBox tbx2 = new TextBox() { Parent = panel1, Dock = DockStyle.Bottom, Font = new Font("Arial", 16) };
 
            tbx2.Text = (listObj[0] as TextBox).Text;
        }
0
blackstar
112 / 112 / 42
Регистрация: 27.02.2013
Сообщений: 899
17.02.2015, 21:55 #8
Андрей69, по идее ты можешь сделать List<TextBox> listObj
1
Андрей69
2 / 2 / 1
Регистрация: 10.03.2013
Сообщений: 75
17.02.2015, 22:06  [ТС] #9
Цитата Сообщение от blackstar Посмотреть сообщение
Андрей69, по идее ты можешь сделать List<TextBox> listObj
A-a-a!!! Я же написал, разнотипные объекты могут быть. Мне нужно было понять, как лучше поступить, если постоянно создавать разные объекты и нужно будет брать из них данные (или методы).
Спасибо! Я понял что вы написали.
0
Metall_Version
2116 / 1253 / 516
Регистрация: 04.03.2014
Сообщений: 4,094
Завершенные тесты: 2
17.02.2015, 23:19 #10
Лучший ответ Сообщение было отмечено Андрей69 как решение

Решение

Андрей69, если все объекты будут контролы , то делай коллекцию контролов, ибо нужно всегда стараться использовать ближнего общего родственника (или интерфейса) у объектов при хранении их в одной коллекции(или массиве). List<object> не гуд

C#
1
List<Control> listObj = new List<Control>();
1
17.02.2015, 23:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.02.2015, 23:19
Привет! Вот еще темы с решениями:

Обмен данными между проектами, как правильно организовать
Доброго времени суток. Есть два проекта в solution. Первый является сервером и...

Как организовать автоматический переход между TextBox-ами?
Суть вопроса: есть 8 TextBox-ов для ввода шестнадцатиричных чисел состоящих из...

Как организовать обмен переменными между Form и Program
Здравствуйте, может быть вопрос будет несколько сумбурным, или вообще это...

Как организовать обмен данными между приложениями по интернету
Здравствуйте! Подскажите пожалуйста, каким образом можно организовать обмен...


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

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

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