powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / вопрос про наследование в winforms...
25 сообщений из 29, страница 1 из 2
вопрос про наследование в winforms...
    #39338039
FB Programmer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть базовая форма 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
вопрос про наследование в winforms...
    #39338041
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FB Programmer, да - можно.
...
Рейтинг: 0 / 0
вопрос про наследование в winforms...
    #39338102
Фотография fortibransa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно
...
Рейтинг: 0 / 0
вопрос про наследование в winforms...
    #39338133
FB Programmer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КАК? в чем смысл?
...
Рейтинг: 0 / 0
вопрос про наследование в winforms...
    #39338140
Фотография fortibransa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
вопрос про наследование в winforms...
    #39338178
FB Programmer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fortibransa,

сделал так же. теперь MessageBox.Show("Click Form2"); два раза отрабатывает...
...
Рейтинг: 0 / 0
вопрос про наследование в winforms...
    #39338187
FB Programmer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а вот так двараза будет отрабатывать 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
вопрос про наследование в winforms...
    #39338195
FB Programmer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не знаю, правильно ли это или нет, но помогло удаление строки
Код: c#
1.
this.button9.Click += new System.EventHandler(this.button9_Click);


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


из потомка
Это в конструкторе такая строка? Ну да, раз два раза подписка на событие осуществляется, то два раза событие и будет отработано. Вы в делегате this.button9.Click накапливаете очередь обработчиков на это событие, а потом они все последовательно выполняются при возникновение этого события. Почитайте подробнее, что такое делегаты и события в дотнете.
...
Рейтинг: 0 / 0
вопрос про наследование в winforms...
    #39338407
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Doomplay998а потом они все последовательно выполняются при возникновение этого события
Не последовательно. Очередь вызова методов из invocation list делегата в общем случае недетерминирована, и гарантий последовательного выполнения в порядке назначения обработчиков нет.
...
Рейтинг: 0 / 0
вопрос про наследование в winforms...
    #39338413
Doomplay998
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныDoomplay998а потом они все последовательно выполняются при возникновение этого события
Не последовательно. Очередь вызова методов из invocation list делегата в общем случае недетерминирована, и гарантий последовательного выполнения в порядке назначения обработчиков нет.
Дай, пожалуйста, ссылку на это. Я вроде последнее, что читал (давно это было), что выполняются они именно в порядке назначения по типу очереди (не стека).
...
Рейтинг: 0 / 0
вопрос про наследование в winforms...
    #39338432
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
вопрос про наследование в winforms...
    #39338445
Фотография fortibransa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны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
вопрос про наследование в winforms...
    #39338446
Фотография fortibransa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насчет порядка вызова делегатов, да в документациях пишут мол , чер-те как будут обрабатыватся, но на практике я чер-ти как ни разу не встретил, такое - же и про forech пишут (писали).
...
Рейтинг: 0 / 0
вопрос про наследование в winforms...
    #39338922
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
вопрос про наследование в winforms...
    #39338957
Фотография fortibransa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
вопрос про наследование в winforms...
    #39339043
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловныреализуется как linked list

Не, тупо как object[].
...
Рейтинг: 0 / 0
вопрос про наследование в winforms...
    #39339081
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВНе, тупо как object[].
Привет индусам-техписателям МСДН.
...
Рейтинг: 0 / 0
вопрос про наследование в winforms...
    #39339200
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныЕвгенийВНе, тупо как object[].
Привет индусам-техписателям МСДН.
Я тут беру инфу в основном.
http://www.ilspy.net/
...
Рейтинг: 0 / 0
вопрос про наследование в winforms...
    #39339217
Doomplay998
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
вопрос про наследование в winforms...
    #39339318
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
ЕвгенийВСон Веры Павловныпропущено...

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


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