Создать событие для вкладок в C # - PullRequest
0 голосов
/ 11 марта 2012

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

tabPage1,
tabPage2,
tabPage3

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

tabControl1

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

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

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

Ответы [ 5 ]

4 голосов
/ 12 марта 2012

Может быть что-то вроде этого:

Использовать TabControl.Selected

private void tabControl1_Selected(Object sender, TabControlEventArgs e) 
{

   if(e.TabPage == tabPage1) 
     DoSomethingInRelationOfTab1();
   else if(e.TabPage == tabPage2)
     DoSomethingInRelationOfTab2();
   ....
   ....
}
1 голос
/ 12 марта 2012

Как это?

private void tabControl1_Selected(object sender, TabControlEventArgs e)
{
    MessageBox.Show("Current Tab: " + tabControl1.SelectedTab.Text);
}
0 голосов
/ 12 марта 2012

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

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

0 голосов
/ 12 марта 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();
}
0 голосов
/ 12 марта 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);
}
...