Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 4
Регистрация: 28.04.2012
Сообщений: 117
1

Переопределить событие для UserContrl'a

15.02.2016, 10:09. Показов 1031. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подскажите как переопределить событие(например) для кнопки находящейся в UserControl, на web-form'e которая в свою очередь унаследована от базового класса.

Вообщем, есть базовый класс UC(
C#
1
public class Uc1 : UserControl
) и UP(
C#
1
public class BasePage: System.Web.UI.Page
), они наследуются user-controlom (.ascx) и web-form'ой (.aspx) соответственно. Необходимо в файле .aspx.cs переопределять метод для одного из контролов, который находится в
user-control.

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
49
50
51
52
public class BasePage : System.Web.UI.Page
    {
        public string PageID { get; set; }
        public string Txt { get; set; }
    }
 
public partial class Core : BasePage 
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Label1.Text = Txt;
            WebUserControl1.str = "юзер_контрол";
            btn_core.Click += Button1_Click;            
        }
 
 
        public void Button1_Click(object sender, EventArgs e)
        {
            Label1.Text = Txt;
        }
//тут переопределение не работает
        override public void SubmitBtn_Click(Object sender, EventArgs e)
        {
            Result.Text = "Переопределенное событие для кнопки из базового класса Uc1";
        }
    }
 
public class Uc1 : UserControl
    {
        public string str { get; set; }
 
        public Label Result;
 
        virtual public void SubmitBtn_Click(Object sender, EventArgs e)
        {
            Result.Text = str;
        }
    }
 
public partial class WebUserControl1 : Uc1
    {
        protected void Page_Load(object sender, EventArgs e)
        {
 
        }
 
//а вот так если, то работает, но так не подходит для проекта
        override public void SubmitBtn_Click(Object sender, EventArgs e)
        {
            Result.Text = "Переопределенное событие для кнопки из базового класса Uc1";
        }
    }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.02.2016, 10:09
Ответы с готовыми решениями:

Как переопределить событие?
Есть класс MyTabControl наследуюший от TabControl. Сам экземпляр класса создается на форме...

Как переопределить (или удалить) событие?
Всем привет! Первый раз программирую под .NET C++ и не могу буквально шагнуть шагу. Вот что я...

Как в классе-перехватчике переопределить событие с аргументами?
Как пример заблокируем выпадание стандартного контекстного меню TEdit. В файле формы реализация...

Переопределить метод toString для подкласса
Допустим есть класс Car: import java.lang.reflect.*; public class Car implements...

5
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
15.02.2016, 10:43 2
Что-то не пойму... вы пытаетесь переопределить метод, находящийся в классе Uc1, в классе Core, который на является наследником Uc1? Если так, то это, понятное дело, абсолютно нелогично и невозможно. Чего вы хотите добиться-плохо понятно. Поясните поподробнее.
0
0 / 0 / 4
Регистрация: 28.04.2012
Сообщений: 117
15.02.2016, 11:50  [ТС] 3
EvilFromHell, Да, именно так, дело в том, что имеется одна Веб-форма, на ней находятся обычные контролы и юзер_контролы(со вложенными в них контролами) и нужно что бы эта веб форма отображалась по разному, в зависимости с какой родительской странице перешли на нее, а именно может быть такое что в юзер_контроле не должны будут отображаться одни контролы, но другие будут, или вообще кнопка может иметь уже другой функционал на событие(поэтому и задан был такой вопрос). Не могу утверждать, что я решение верное, но я его вижу так, если это не правильно ну вообще никак, объясните почему и дайте направление в котором стоит двигаться дальше(правильно).
0
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
15.02.2016, 16:50 4
Tantay, ну так а чем вам не нравится наследование от Uc1 и использование соответствующего наследника? Или можно сделать какие-то публичные методы/свойства у Uc1, которые позволяют настраивать то, что вам надо. Кроме того, можно свои события к юзерконтролу прилепить(например пробрасывать так выше нажатие на нем кнопки) и на них уже подписываться.
0
0 / 0 / 4
Регистрация: 28.04.2012
Сообщений: 117
16.02.2016, 08:08  [ТС] 5
EvilFromHell, сделал вообщем так, но не знаю насколько это правильно:
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
49
50
public class Uc1 : UserControl
    {
        public string str { get; set; }
 
        public Label Result;
 
        public void DoIt()
        {
            Response.Write("DoIt");
        }
 
        public event EventHandler SubmitBtnClick;
 
        protected virtual void onSubmitBtnClick(EventArgs e)
        {
            if (SubmitBtnClick != null)
            {
                SubmitBtnClick(this, e);
            }
        }
 
        virtual public void SubmitBtn_Click(Object sender, EventArgs e)
        {
            onSubmitBtnClick(e);
            Result.Text = str;
        }
 
 
    }
 
public partial class Core : BasePage 
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Label1.Text = Txt;
            WebUserControl1.str = "юзер_контрол";
            btn_core.Click += Button1_Click;
            WebUserControl1.SubmitBtnClick += Button1_Click;
 
        }
 
 
        public void Button1_Click(object sender, EventArgs e)
        {
            Label1.Text = Txt;// = "Button clicked on main Page";
            WebUserControl1.DoIt();
        }
 
 
    }
0
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
16.02.2016, 08:16 6
Tantay, ну это то самое, о чем я писал тут:
Цитата Сообщение от EvilFromHell Посмотреть сообщение
Кроме того, можно свои события к юзерконтролу прилепить(например пробрасывать так выше нажатие на нем кнопки) и на них уже подписываться.
Это работать будет, но вполне возможно, что реально сделать и красивее, зависит уже от специфики конкретной программы.

Кстати, вместо проверки на null, можно с событием делать так:
C#
1
public event EventHandler SubmitBtnClick = delegate{};
Тогда там всегда будет висеть пустой делегат и никаких исключений вылетать не будет, даже если на событие никто не подписан.
1
16.02.2016, 08:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.02.2016, 08:16
Помогаю со студенческими работами здесь

Из OnKeyDown переопределить Key для OnKeyPress
Задача: при нажатии определенных клавиш на клавиатуре задать для ввода в Edit.Text определенный...

Можно ли переопределить ToString для типов значений
Вопрос на засыпку:) А можно ли переопределить ToString для типов значений? Скажем, я хочу чтобы...

Возможно ли переопределить метод для конкретного обьекта?
Возможно ли переопределить метод для конкретного обьекта? Допустим есть 2 обьекта одинакового...

Переопределить метод интерфейса Comparable для подкласса
Медленными шагами развиваюсь по книге Хорстмана и Корнелла, наткнулся на такую проблему: У меня...

Как лучше переопределить GetHashCode() для моего класса
Здравствуйте, уважаемые форумчане, возник вопрос к знающим людям. Имеется простой класс, с парой...

Переопределить ToString для вывода всех элементов коллекции
Не знаю правильное ли название темы.В общем.Есть коллекция А которая содержит экземпляры класса b...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru