Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / вопрос про наследование в winforms... / 25 сообщений из 29, страница 1 из 2
31.10.2016, 15:37
    #39338039
FB Programmer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос про наследование в winforms...
есть базовая форма 1 с кнопкой Б, по нажатию на которую отрабатывает код 1, от нее наследуется другая форма 2. можно ли в форме-потомке 2 сделать так, чтобы при нажатии на кнопку Б отрабатывал код 2 и не отрабатывал при этом код 1?

т.е. на мой взгляд проблема в том, что нельзя написать вот так в форме-потомке 2:
Код: c#
1.
this.mybutton.Click = new System.EventHandler(this.mybutton_Click_for_form2);


ибо
авторThe event 'Control.Click' can only appear on the left hand side of += or -=
...
Рейтинг: 0 / 0
31.10.2016, 15:40
    #39338041
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос про наследование в winforms...
FB Programmer, да - можно.
...
Рейтинг: 0 / 0
31.10.2016, 16:16
    #39338102
fortibransa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос про наследование в winforms...
Можно
...
Рейтинг: 0 / 0
31.10.2016, 16:34
    #39338133
FB Programmer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос про наследование в winforms...
КАК? в чем смысл?
...
Рейтинг: 0 / 0
31.10.2016, 16:40
    #39338140
fortibransa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос про наследование в winforms...
Код: c#
1.
2.
3.
4.
5.
 //Form1
protected virtual void button9_Click(object sender, EventArgs e)
{
       MessageBox.Show("Click Form1");
}


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
    public partial class Form2 : Form1
    {
        public Form2()
        {
            InitializeComponent();
        }

        protected override void button9_Click(object sender, EventArgs e)
        {
            //base.button9_Click(sender, e);
            MessageBox.Show("Click Form2");
        }
    }
...
Рейтинг: 0 / 0
31.10.2016, 17:16
    #39338178
FB Programmer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос про наследование в winforms...
fortibransa,

сделал так же. теперь MessageBox.Show("Click Form2"); два раза отрабатывает...
...
Рейтинг: 0 / 0
31.10.2016, 17:22
    #39338187
FB Programmer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос про наследование в winforms...
а вот так двараза будет отрабатывать MessageBox.Show("Click Form1");
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
public partial class Form2 : Form1
    {
        public Form2()
        {
            InitializeComponent();
        }

        protected override void button9_Click(object sender, EventArgs e)
        {
            base.button9_Click(sender, e);
            //MessageBox.Show("Click Form2");
        }
    }


что с этим делать?
...
Рейтинг: 0 / 0
31.10.2016, 17:43
    #39338195
FB Programmer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос про наследование в winforms...
не знаю, правильно ли это или нет, но помогло удаление строки
Код: c#
1.
this.button9.Click += new System.EventHandler(this.button9_Click);


из потомка
...
Рейтинг: 0 / 0
31.10.2016, 19:03
    #39338244
Doomplay998
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос про наследование в winforms...
FB Programmerне знаю, правильно ли это или нет, но помогло удаление строки
Код: c#
1.
this.button9.Click += new System.EventHandler(this.button9_Click);


из потомка
Это в конструкторе такая строка? Ну да, раз два раза подписка на событие осуществляется, то два раза событие и будет отработано. Вы в делегате this.button9.Click накапливаете очередь обработчиков на это событие, а потом они все последовательно выполняются при возникновение этого события. Почитайте подробнее, что такое делегаты и события в дотнете.
...
Рейтинг: 0 / 0
01.11.2016, 03:33
    #39338407
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос про наследование в winforms...
Doomplay998а потом они все последовательно выполняются при возникновение этого события
Не последовательно. Очередь вызова методов из invocation list делегата в общем случае недетерминирована, и гарантий последовательного выполнения в порядке назначения обработчиков нет.
...
Рейтинг: 0 / 0
01.11.2016, 04:08
    #39338413
Doomplay998
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос про наследование в winforms...
Сон Веры ПавловныDoomplay998а потом они все последовательно выполняются при возникновение этого события
Не последовательно. Очередь вызова методов из invocation list делегата в общем случае недетерминирована, и гарантий последовательного выполнения в порядке назначения обработчиков нет.
Дай, пожалуйста, ссылку на это. Я вроде последнее, что читал (давно это было), что выполняются они именно в порядке назначения по типу очереди (не стека).
...
Рейтинг: 0 / 0
01.11.2016, 06:23
    #39338432
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос про наследование в winforms...
Doomplay998Дай, пожалуйста, ссылку на это. Я вроде последнее, что читал (давно это было), что выполняются они именно в порядке назначения по типу очереди (не стека).
https://www.google.ru/search?q=c# delegate invocation list order
В моем постинге выше ключевое слово - "в общем случае". С одной стороны, конечно, в стандартном MulticastDelegate invocation list реализуется как linked list :
A MulticastDelegate has a linked list of delegates, called an invocation list, consisting of one or more elements. When a multicast delegate is invoked, the delegates in the invocation list are called synchronously in the order in which they appear. If an error occurs during execution of the list then an exception is thrown.
с другой стороны, автору какого-либо класса ничего не мешает реализовать свою логику хранения подписчиков через явно прописанные add/remove, и там внутри может быть что угодно - HashSet, например (см. всё того же Рихтера, у него есть пример именно на эту тему). И ничего не мешает точно так же поступить в будущих версиях фреймворка и MS - очередность вызова никак не обеспечивается контрактом делегатов. И поэтому проектировать приложение, опираясь на предположения о порядке вызова делегатов, равно и как высказывать такие предположения - опрометчиво.
...
Рейтинг: 0 / 0
01.11.2016, 07:49
    #39338445
fortibransa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос про наследование в winforms...
Сон Веры ПавловныDoomplay998Дай, пожалуйста, ссылку на это. Я вроде последнее, что читал (давно это было), что выполняются они именно в порядке назначения по типу очереди (не стека).
https://www.google.ru/search?q=c# delegate invocation list order
В моем постинге выше ключевое слово - "в общем случае". С одной стороны, конечно, в стандартном MulticastDelegate invocation list реализуется как linked list :
A MulticastDelegate has a linked list of delegates, called an invocation list, consisting of one or more elements. When a multicast delegate is invoked, the delegates in the invocation list are called synchronously in the order in which they appear. If an error occurs during execution of the list then an exception is thrown.
с другой стороны, автору какого-либо класса ничего не мешает реализовать свою логику хранения подписчиков через явно прописанные add/remove, и там внутри может быть что угодно - HashSet, например (см. всё того же Рихтера, у него есть пример именно на эту тему). И ничего не мешает точно так же поступить в будущих версиях фреймворка и MS - очередность вызова никак не обеспечивается контрактом делегатов. И поэтому проектировать приложение, опираясь на предположения о порядке вызова делегатов, равно и как высказывать такие предположения - опрометчиво.Вера Павловна, Вы сошли с ума, ТС открыл для себя наследование, а Вы ему "свою логику хранения подписчиков через явно прописанные add/remove", це ж китайская грамота для начинающих.
...
Рейтинг: 0 / 0
01.11.2016, 07:51
    #39338446
fortibransa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос про наследование в winforms...
Насчет порядка вызова делегатов, да в документациях пишут мол , чер-те как будут обрабатыватся, но на практике я чер-ти как ни разу не встретил, такое - же и про forech пишут (писали).
...
Рейтинг: 0 / 0
01.11.2016, 14:20
    #39338922
Nomix
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос про наследование в winforms...
Лучше всего так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
// В форме 1
protected void button9_Click(object sender, EventArgs e)
{
    DoClick();        
}

protected virtual void DoClick()
{
MessageBox.Show("Form1 click");
}

// В наследнике Form2

protected override void DoClick()
{
MessageBox.Show("Form2 click");
}
...
Рейтинг: 0 / 0
01.11.2016, 14:32
    #39338957
fortibransa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос про наследование в winforms...
NomixЛучше всего так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
// В форме 1
protected void button9_Click(object sender, EventArgs e)
{
    DoClick();        
}

protected virtual void DoClick()
{
MessageBox.Show("Form1 click");
}

// В наследнике Form2

protected override void DoClick()
{
MessageBox.Show("Form2 click");
}

Зачет.
...
Рейтинг: 0 / 0
01.11.2016, 15:33
    #39339043
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос про наследование в winforms...
Сон Веры Павловныреализуется как linked list

Не, тупо как object[].
...
Рейтинг: 0 / 0
01.11.2016, 16:12
    #39339081
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос про наследование в winforms...
ЕвгенийВНе, тупо как object[].
Привет индусам-техписателям МСДН.
...
Рейтинг: 0 / 0
01.11.2016, 17:36
    #39339200
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос про наследование в winforms...
Сон Веры ПавловныЕвгенийВНе, тупо как object[].
Привет индусам-техписателям МСДН.
Я тут беру инфу в основном.
http://www.ilspy.net/
...
Рейтинг: 0 / 0
01.11.2016, 17:49
    #39339217
Doomplay998
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос про наследование в winforms...
fortibransaНасчет порядка вызова делегатов, да в документациях пишут мол , чер-те как будут обрабатыватся, но на практике я чер-ти как ни разу не встретил, такое - же и про forech пишут (писали).
В общем случае чёрти как, но там явно что-то типа стандартного алгоритма для наиболее распространённых случаев, и всякие кейсы для специальных. Просто у тебя были только распространённые случаи, вот и кажется, что всегда одинаково.

Насчёт форича - если ты итератор внутрифоричевский в другом потоке хотя бы раз вызовешь, то вместо 1, 2, 3, 4 можешь получить 1, 3, 4, например.

NomixЛучше всего так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
// В форме 1
protected void button9_Click(object sender, EventArgs e)
{
    DoClick();        
}

protected virtual void DoClick()
{
MessageBox.Show("Form1 click");
}

// В наследнике Form2

protected override void DoClick()
{
MessageBox.Show("Form2 click");
}


А что это даёт вместо переопределения самого обработчика события?
...
Рейтинг: 0 / 0
01.11.2016, 19:34
    #39339318
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос про наследование в winforms...
ЕвгенийВСон Веры Павловныпропущено...

Привет индусам-техписателям МСДН.
Я тут беру инфу в основном.
http://www.ilspy.net/
Инфа там может быть и есть, но только на скуле тебя сначала обольют гавном, но зато потом реально помогу.
...
Рейтинг: 0 / 0
01.11.2016, 20:47
    #39339365
fsharp_fsharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос про наследование в winforms...
визуальное наследование форм - путь к тому, чтобы потом его убрать и больше не использовать никогда. в WinForms это наследование еще и глючное (тут раньше уже не раз обсуждалось)
...
Рейтинг: 0 / 0
01.11.2016, 22:07
    #39339408
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос про наследование в winforms...
fsharp_fsharpвизуальное наследование форм - путь к тому, чтобы потом его убрать и больше не использовать никогда. в WinForms это наследование еще и глючное (тут раньше уже не раз обсуждалось)
Ну, диалоговую форму с панелью и двумя кнопками вполне себе хорошо наследовать
...
Рейтинг: 0 / 0
01.11.2016, 22:45
    #39339425
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос про наследование в winforms...
fsharp_fsharpвизуальное наследование форм - путь к тому, чтобы потом его убрать и больше не использовать никогда. в WinForms это наследование еще и глючное (тут раньше уже не раз обсуждалось)
Форма - обычный класс, а глючит мышководная контролокидательная студия
...
Рейтинг: 0 / 0
02.11.2016, 04:24
    #39339504
Doomplay998
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос про наследование в winforms...
Изопропилfsharp_fsharpвизуальное наследование форм - путь к тому, чтобы потом его убрать и больше не использовать никогда. в WinForms это наследование еще и глючное (тут раньше уже не раз обсуждалось)
Форма - обычный класс, а глючит мышководная контролокидательная студия
Т. е. если в WPF можно без мышководства делать формы, то наследовать можно и вообще зэ бест? А то я у себя кое-где отнаследовал - теперь по фасту фиксить?
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / вопрос про наследование в winforms... / 25 сообщений из 29, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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