Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Передача объектов между окнами / 12 сообщений из 12, страница 1 из 1
10.03.2015, 16:47
    #38900268
erman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача объектов между окнами
Здравствуйте!
Есть три кнопки на основной форме. Также имеется три класса, соответствующие кнопкам. Нужно передавать объект Button обратно в основную форму при возникновении события. Мне нужен текст кнопки. Как сделать?
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button4_Click(object sender, EventArgs e)
        {
            Counter counter = new Counter();
          
            Class1 class1 = new Class1();
            Class2 class2 = new Class2();
            Class3 class3 = new Class3();

            counter.onCount += class1.ShowMessage;
            counter.onCount += class2.ShowMessage;
            counter.onCount += class3.ShowMessage;

            counter.Count();
        }        
    }



Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
class Class1
    {
        public void ShowMessage()
        {
            Form1 form1 = new Form1();
            Messages messages = new Messages();
            form1.button1.Text = messages.Message(form1.button1);
        }
    }



Буду признателен за помощь!
...
Рейтинг: 0 / 0
10.03.2015, 17:45
    #38900379
Ilya81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача объектов между окнами
Полагаю, лучше использовать MVP .
...
Рейтинг: 0 / 0
11.03.2015, 12:18
    #38901050
D129
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача объектов между окнами
erman,

sender - Это и есть тот обьект, который вызвал обработчик.

то есть -

Код: c#
1.
2.
3.
Button pressedB = sender as Button;

pressedB.Text = "I have been pressed";
...
Рейтинг: 0 / 0
11.03.2015, 12:26
    #38901061
D129
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача объектов между окнами
erman,

Вообще-то жуткий код какой-то....
Вы уже сами эвент написали? Зачем?
На таком уровне знаний вам должно хватать стандартных событий...

Что конкретно вы хотите сделать?
...
Рейтинг: 0 / 0
11.03.2015, 12:27
    #38901063
D129
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача объектов между окнами
Ilya81Полагаю, лучше использовать MVP .

Не согласен - не в первой апликации. И не в любой следующей апликации...
...
Рейтинг: 0 / 0
11.03.2015, 13:10
    #38901154
Ilya81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача объектов между окнами
D129Ilya81Полагаю, лучше использовать MVP .

Не согласен - не в первой апликации. И не в любой следующей апликации...
Главное - не слишком поздно, чтоб потом не стало получаться что-то, чему место здесь .
...
Рейтинг: 0 / 0
11.03.2015, 14:22
    #38901364
erman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача объектов между окнами
D129erman,

Вообще-то жуткий код какой-то....
Вы уже сами эвент написали? Зачем?
На таком уровне знаний вам должно хватать стандартных событий...

Что конкретно вы хотите сделать?

Событие написано мной! Тестовое задание...
Код: c#
1.
2.
3.
4.
5.
6.
7.
public class Messages
    {
        public string Message(Button btn)
        {
            return btn.Text += " = 8!!!";
        }
    }


Нужно передать Button и добавить в его свойство Text дополнительный текст...
...
Рейтинг: 0 / 0
11.03.2015, 18:07
    #38901678
D129
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача объектов между окнами
ermanНужно передать Button и добавить в его свойство Text дополнительный текст...

Ок, давайте постепенно.
Пойдем простым логическим ходом (исходя из того, что все уже написано до нас, и ваше задание - тривиальное, и решенное уже тысячи раз).

Кнопка создана для того, чтобы ее нажимать. Для того, чтобы получить факт нажатия - уже есть эвент у самой кнопки - "Click"

На него и надо подписываться.
в обработчик эвента приходят параметры - sender и e .

sender и есть так кнопка, которая была нажата (передана нам по ссылке, если вы это имеете в виду под "передать").
Только она приведена к базовому типу Object.
Для того, чтобы опять увидеть ее как кнопку, с текстом и прочими свойствами - ее надо привести обратно.
Могу обьяснить подробнее, если хотите,
но один из способов:

Код: c#
1.
Button pressedB = sender as Button;



Дальше обращаемся к свойству, и меняем его на что угодно.

Этот же обработчик можно использовать для любой другой кнопки, и вообще всего, у чего есть событие "Click".

Это к вопросу повторного использования кода и неписания классов с именами Class1 , Class2 ...
...
Рейтинг: 0 / 0
11.03.2015, 18:25
    #38901708
D129
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача объектов между окнами
Ilya81Главное - не слишком поздно, чтоб потом не стало получаться что-то, чему место здесь .
Вы архитектор, наверное... Причем сразу по профессии работаете ...
...
Рейтинг: 0 / 0
11.03.2015, 18:39
    #38901724
erman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача объектов между окнами
[quot D129]ermanНужно передать Button и добавить в его свойство Text дополнительный текст...

Ок, давайте постепенно.
Пойдем простым логическим ходом (исходя из того, что все уже написано до нас, и ваше задание - тривиальное, и решенное уже тысячи раз).

Кнопка создана для того, чтобы ее нажимать. Для того, чтобы получить факт нажатия - уже есть эвент у самой кнопки - "Click"

На него и надо подписываться.
в обработчик эвента приходят параметры - sender и e .

sender и есть так кнопка, которая была нажата (передана нам по ссылке, если вы это имеете в виду под "передать").
Только она приведена к базовому типу Object.
Для того, чтобы опять увидеть ее как кнопку, с текстом и прочими свойствами - ее надо привести обратно.
Могу обьяснить подробнее, если хотите,
но один из способов:

Код: c#
1.
Button pressedB = sender as Button;



И где здесь sender ?
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
class Class1
    {
        public void ShowMessage()
        {
            Form1 form1 = new Form1();
            Messages messages = new Messages();            
            form1.button1.Text = messages.Message(form1.button1);
        }
    }



Мне нужно в метод messages.Message(form1.button1) отправить кнопку со всеми её свойствами. Как это сделать? А уже в методе Message(...) добавить какой-то текст к тексту соответствующей кнопки и установить его в стартовой форме. Здесь это сделать :
Код: c#
1.
2.
3.
4.
5.
6.
7.
public class Messages
    {
        public string Message(Button btn)
        {
            return btn.Text += " = 8!!!";
        }
    }
...
Рейтинг: 0 / 0
11.03.2015, 20:10
    #38901796
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача объектов между окнами
erman,

Полагаю, вам нужно в конструктор вашего класса, передавать ссылку на кнопку, вот здесь:
Код: c#
1.
private void button4_Click(object sender, EventArgs e)



А из этого, что ниже, похоже что вы создаёте новый экземпляр формы, и хотите из неё вытащить ссылку на кнопку - а значением там будет "по-умолчанию", а я так думаю вы хотите чтобы каждый ShowMessage() из классов добавлял текст к кнопке на форме по порядку (накопительно)
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
class Class1
    {
        public void ShowMessage()
        {
            Form1 form1 = new Form1();
            Messages messages = new Messages();            
            form1.button1.Text = messages.Message(form1.button1);
        }
    }
...
Рейтинг: 0 / 0
12.03.2015, 09:23
    #38902051
D129
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача объектов между окнами
erman,

Еще я бы вам посоветовал сделать паузу, и почитать про UserControl
Это самый правильный способ держать рядом со стандартной кнопкой какой-то особый код.

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

С эвентом разобрались, классы пишите - освойте еще один способ повторного использования кода - композиция.

Сврехзадача такая (как я думаю) - увидеть в задаче общее, и это общее описать одним кодом, который справляется с частностями.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Передача объектов между окнами / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]