Создать событие для вкладок в C #

Я разрабатываю приложение на C # Windows Forms, и я хотел бы создать обработчик событий / обработчики событий в зависимости от того, выбрана ли конкретная страница вкладки элемента управления вкладкой. Так, например, если у меня есть три вкладки:

tabPage1,
tabPage2,
tabPage3,

которые принадлежат

tabControl1,

Мне нужен код:

  1. Используйте три отдельных обработчика событий для каждой вкладки.
  2. Имейте один обработчик событий, и внутри обработчика событий есть код, который может определять текущую выбранную вкладку (например, оператор case какого-либо вида)

Я просмотрел несколько примеров, но, похоже, ни один из них не делает то, что мне нужно. Как я могу создать это событие / эти события?


person user1224504    schedule 11.03.2012    source источник
comment
вы также можете использовать введенное событие. Получил неплохой успех с этим   -  person nawfal    schedule 12.03.2012


Ответы (5)


Может быть примерно так:

Воспользуйтесь TabControl.Selected

private void tabControl1_Selected(Object sender, TabControlEventArgs e) 
{

   if(e.TabPage == tabPage1) 
     DoSomethingInRelationOfTab1();
   else if(e.TabPage == tabPage2)
     DoSomethingInRelationOfTab2();
   ....
   ....
}
person Tigran    schedule 11.03.2012
comment
Когда я попробовал этот код, я столкнулся со следующей ошибкой: «App.Form1.tabPage1» является «полем», но используется как «тип». Вместо использования if (e.TabPage is tabPage1) Я попробовал if (e.TabPage == tabPage1), но это не сработало - person user1224504; 12.03.2012
comment
(e.TabPage is tabPage1) переключите e.TabPage и tabPage1 - person mo.; 12.03.2012
comment
@ user1224504: Исправил ответ на ==. Что не работает с этим шаблоном? - person Tigran; 12.03.2012

Нравится?

private void tabControl1_Selected(object sender, TabControlEventArgs e)
{
    MessageBox.Show("Current Tab: " + tabControl1.SelectedTab.Text);
}
person Steve Wellens    schedule 11.03.2012

Другое решение - создать подкласс TabPage

class MyTabPage : TabPage {
    event EventHandler Activated;

    public void OnActivated() {
        if (Activated != null)
           Activated(this, EventArgs.Empty);
    }
}

void HandleTabIndexChanged(object sender, EventArgs args) {
    var tabControl = sender as TabControl;
    var tabPage = tabControl.SelectedTab as MyTabPage;
    if (tabPage != null)
        tabPage.OnActivated();
}
person mo.    schedule 11.03.2012

Вам следует искать событие VisibleChanged в дочернем элементе управления вкладки. Это событие будет запущено для всех дочерних элементов управления на странице вкладки.

Это очень полезно, когда вы размещаете CustomControl на каждой странице. Затем вы можете обновить CustomControl при запуске VisibleChanged.

person Casperah    schedule 11.03.2012

Это помогало мне:

private void tabControl1_Selected(Object sender, TabControlEventArgs e)
{
    // Could be initialized in "Form_Load"
    var validTabPages = new[]
    {
        tabPage1,
        tabPage2,
        tabPage3,
        tabPage4
    };

    // If not a valid TabPage, just return
    if (!validTabPages.Contains(e.TabPage))
        return;

    pictureBox2.Parent.Controls.Remove(pictureBox2);
    pictureBox5.Parent.Controls.Remove(pictureBox5);

    e.TabPage.Controls.Add(pictureBox2);
    e.TabPage.Controls.Add(pictureBox5);
}
person mo.    schedule 11.03.2012
comment
вы можете объединить это с примером @Tigran s - person mo.; 12.03.2012
comment
Я не совсем понимаю, как работает этот код, и поэтому не уверен, как протестировать его в моем приложении (я относительно новичок в программировании на C #). Можно ли еще немного прокомментировать код, если это возможно? - person user1224504; 12.03.2012
comment
@ Тигран @mo. Это то, что я пробовал, но окна с изображениями не перемещались с одной вкладки на другую, когда я щелкал вкладку. (Я знаю, что это работает, потому что я пробовал код для события нажатия кнопки) `private void tabControl1_Selected (Object sender, TabControlEventArgs e) {if (e.TabPage == tabPage1) {this.tabPage2.Controls.Add (this.pictureBox5) ; } иначе, если (e.TabPage == tabPage2) {this.tabPage2.Controls.Add (this.pictureBox5); }} ` - person user1224504; 12.03.2012
comment
Прошу прощения, если я немного не успеваю понять, но я все еще не уверен, как интегрировать ваш код в приложение. Куда девается каждая из этих функций? Этот код выглядит очень хорошо продуманным, но мне он также кажется очень чуждым: /. Пожалуйста, помогите, если можете ... любые объяснения, указывающие мне, как настроить этот код, были бы признательны. - person user1224504; 12.03.2012
comment
хорошо, вы хотите добавить окно с изображениями на текущую выбранную вкладку? - person mo.; 12.03.2012
comment
Это много кода, и это для моего проекта последнего года, поэтому я не уверен, было бы разумно опубликовать весь мой код публично. Есть ли способ отправить его в более частном порядке? (При необходимости могу отправить папку с проектом). Я не возражаю против обнародования сегментов кода, но я бы предпочел не публиковать весь проект в открытом доступе. - person user1224504; 12.03.2012