none
Как переопределить событие в C#? RRS feed

  • Вопрос

  • Есть класс MyTabControl наследуюший от TabControl.

    Сам экземпляр класса   создается на форме программным способом.

    Необходимо переопределить событие

     

    private
     void
     tabcontrol_SelectedIndexChanged(Object sender, EventArgs e)
       {
        MessageBox.Show("You are in the TabControl.SelectedIndexChanged event."
    );
       }
    

    Просто вставить верхний текст не получается, хотя я пребывал так сделать с DataGridView получилось.

     

    3 января 2011 г. 16:31

Ответы

  • Наверно, ты имеешь ввиду создать обработчик события? Тогда так:

      // Класс
      public class MyTabControl:TabControl {}
          
    
    // Где-то в недрах формы
          // Создаем экземпляр
          MyTabControl mtb = new MyTabControl();
          // Добавляем закладки
          mtb.TabPages.Add("1");
          mtb.TabPages.Add("2");
          // Вешаем обработчик
          mtb.SelectedIndexChanged += new EventHandler(mtb_SelectedIndexChanged);
          // Помещаем на форму экземпляр
          this.Controls.Add(mtb);
    
        // Реализзация обработчика
        void mtb_SelectedIndexChanged(object sender, EventArgs e)
        {
          MessageBox.Show("You are in the TabControl.SelectedIndexChanged event.");
        }
    

    • Предложено в качестве ответа Bahromjon 10 января 2011 г. 10:38
    • Помечено в качестве ответа Abolmasov Dmitry 10 января 2011 г. 22:53
    4 января 2011 г. 7:15
    Модератор
  • Стоп, а что значит переопределить? Ведь можно вместо этого, во-первых, отписаться от события а-ля tabcontrol.SelectedIndexChanged -= tabcontrol_SelectedIndexChanged; а потом переподписаться на какое-то другое событие, например tabcontrol.SelectedIndexChanged += (sender, e) => { ваш код тут }
    - Dmitri Nesteruk, MVP C#, Microsoft Partner
    • Помечено в качестве ответа Abolmasov Dmitry 10 января 2011 г. 22:53
    5 января 2011 г. 5:18
  • Так можно переопределить:

      class myTab : TabControl
      {
        protected override void OnSelectedIndexChanged(EventArgs e)
        {
          MessageBox.Show("You are in the TabControl.SelectedIndexChanged event.");
          // если закомментировать строчку ниже, то при подписке на событие, обработчик события не будет работать
          base.OnSelectedIndexChanged(e); 
        }
      }
    

    Для связи [mail]
    • Помечено в качестве ответа Abolmasov Dmitry 10 января 2011 г. 23:02
    10 января 2011 г. 23:01

Все ответы

  • Наверно, ты имеешь ввиду создать обработчик события? Тогда так:

      // Класс
      public class MyTabControl:TabControl {}
          
    
    // Где-то в недрах формы
          // Создаем экземпляр
          MyTabControl mtb = new MyTabControl();
          // Добавляем закладки
          mtb.TabPages.Add("1");
          mtb.TabPages.Add("2");
          // Вешаем обработчик
          mtb.SelectedIndexChanged += new EventHandler(mtb_SelectedIndexChanged);
          // Помещаем на форму экземпляр
          this.Controls.Add(mtb);
    
        // Реализзация обработчика
        void mtb_SelectedIndexChanged(object sender, EventArgs e)
        {
          MessageBox.Show("You are in the TabControl.SelectedIndexChanged event.");
        }
    

    • Предложено в качестве ответа Bahromjon 10 января 2011 г. 10:38
    • Помечено в качестве ответа Abolmasov Dmitry 10 января 2011 г. 22:53
    4 января 2011 г. 7:15
    Модератор
  • переопределить TabControl.SelectedIndexChanged нелзя.  Оно не обявлено как virtual.

    Можно толко явно перекрывать:

    public class MyTab : TabControl
    {
     public new event EventHandler SelectedIndexChanged;
    }
    
    • Изменено Bahromjon 10 января 2011 г. 10:35
    • Предложено в качестве ответа Bahromjon 10 января 2011 г. 10:38
    4 января 2011 г. 16:31
  • переопределить TabControl.SelectedIndexChanged нелзя.  Оно не обявлено как virtual.

    Можно явно перекрывать:

    public
     class
     MyTab : TabControl
    {
     public
     new
     event
     EventHandler SelectedIndexChanged;
    }
    


    А если, как прозвучало в вопросе,  экземпляр класса  создается  программным способом? ;)

     

    4 января 2011 г. 23:03
  • переопределить TabControl.SelectedIndexChanged нелзя.  Оно не обявлено как virtual.

    Можно явно перекрывать:

    public
    
     class
    
     MyTab : TabControl
    
    {
    
     public
    
     new
    
     event
    
     EventHandler SelectedIndexChanged;
    
    }
    
    


    А если, как прозвучало в вопросе,  экземпляр класса  создается  программным способом? ;)

     


    Выше указано код для этой случай.
    5 января 2011 г. 5:11
  • Стоп, а что значит переопределить? Ведь можно вместо этого, во-первых, отписаться от события а-ля tabcontrol.SelectedIndexChanged -= tabcontrol_SelectedIndexChanged; а потом переподписаться на какое-то другое событие, например tabcontrol.SelectedIndexChanged += (sender, e) => { ваш код тут }
    - Dmitri Nesteruk, MVP C#, Microsoft Partner
    • Помечено в качестве ответа Abolmasov Dmitry 10 января 2011 г. 22:53
    5 января 2011 г. 5:18
  • Так можно переопределить:

      class myTab : TabControl
      {
        protected override void OnSelectedIndexChanged(EventArgs e)
        {
          MessageBox.Show("You are in the TabControl.SelectedIndexChanged event.");
          // если закомментировать строчку ниже, то при подписке на событие, обработчик события не будет работать
          base.OnSelectedIndexChanged(e); 
        }
      }
    

    Для связи [mail]
    • Помечено в качестве ответа Abolmasov Dmitry 10 января 2011 г. 23:02
    10 января 2011 г. 23:01