Событие Windows Forms «На вкладке выбора»? - PullRequest
21 голосов
/ 27 мая 2010

Я создаю приложение Windows Forms на C #. Как запустить код, если выбрана определенная вкладка в меню вкладок?

Ответы [ 5 ]

34 голосов
/ 27 мая 2010

Я думаю, что это событие TabControl.SelectedIndexChanged.

Просто посмотрите на MSDN. Я взял это оттуда. Предположим, вы назвали свой элемент управления вкладкой tabControl1. Вы должны подписаться на это событие, используя:

tabContrl1.TabControl.SelectedIndexChanged += tabControl1_SelectedIndexChanged;

И добавить обработчик событий

private void tabControl1_SelectedIndexChanged(Object sender, EventArgs e) {

   MessageBox.Show("You are in the TabControl.SelectedIndexChanged event.");
}
13 голосов
/ 27 мая 2010

Событие TabControl и его событие SelectedIndexChanged сделают то, что вам нужно.

Например, у вас есть файл клиента с TabControl в части сведений формы. Вы хотите загружать лени-загрузку транзакций этого клиента, когда пользователь нажимает транзакции TabPage. Ваш код должен выглядеть следующим образом:

public partial class CustomerMgmtForm : Form {
    // Assuming the design already done, so the TabControl control exists on your form.
    public CustomerMgmtForm() {
        tabControl1.SelectedIndexChanged += new EventHandler(tabControl1_SelectedIndexChanged);
    }

    private void tabControl1_SelectedIndexchanged(object sender, EventArgs e) {
        switch((sender as TabControl).SelectedIndex) {
            case 0:
                // Do nothing here (let's suppose that TabPage index 0 is the address information which is already loaded.
                break;
            case 1:
                // Let's suppose TabPage index 1 is the one for the transactions.
                // Assuming you have put a DataGridView control so that the transactions can be listed.
                // currentCustomer.Id can be obtained through the CurrencyManager of your BindingSource object used to data bind your data to your Windows form controls.
                dataGridview1.DataSource = GetTransactions(currentCustomer.Id);
                break;
        }
    }
}

Следующее также полезно при игре с TabControl.

  1. TabControl.TabPages.Add ();
  2. TabControl.TabPages.ContainsKey ();
  3. TabControl.TabPages.Remove ();
  4. TabControl.TabPages.RemoveAt ();
  5. TabControl.TabPages.RemoveByKey ().

Использование TabControl.TabPageCollection Members.

РЕДАКТИРОВАТЬ # 1

Для выбора конкретной вкладки ее можно идентифицировать только по 0, 1, 2, а не по имени вкладки?

Да, вы также можете увеличивать или уменьшать свойство TabControl.SelectedIndex, чтобы сделать определенный TabPage выбранным / активным.

Тем не менее, убедитесь, что вы не индексировали TabPage из TabPages.Count - 1, поскольку начальный индекс равен 0, в противном случае вы получите IndexOutOfRangeException. 1061 *

Чтобы продолжить наш пример, где у нас есть две страницы, информация об адресе и транзакции:

// Will automatically change the selected tab to the Transactions TabPage.
tabControl1.SelectedIndex = 1; 

// Considering there a count of two TabPages, the first is indexed at 0, and the second at 1.  
// Setting the SelectedIndex property to 2 will throw.
tabControl1.SelectedIndex = 2; 

Примечание. Любое изменение свойства TabControl.SelectedIndex вызовет событие TabControl.SelectedIndexChanged.

4 голосов
/ 21 июня 2012

Для выбора конкретной вкладки можно ли ее идентифицировать только по 0, 1, 2, а не по имени вкладки?

Это можно сделать, добавив прослушиватель событий на фактическую вкладку, а не на элемент управления вкладкой.

Если бы у вас была вкладка с именем tabHistory, вы можете добавить следующую строку в конструктор.

this.tabHistory.Enter += new System.EventHandler(this.tabHistory_Enter);

Затем просто добавьте свой метод, чтобы перехватить событие.

private void tabHistory_Enter(object sender, EventArgs e)
{
    MessageBox.Show("Hey! Ive got focus");
}
2 голосов
/ 03 июля 2018

если у вас, например, 3 вкладки ...

if (tabControl.SelectedTab == tabControl.TabPages[0])
               do something...
if (tabControl.SelectedTab == tabControl.TabPages[1])
               do something else...
if (tabControl.SelectedTab == tabControl.TabPages[2])
               do something else...
1 голос
/ 27 мая 2010

Проверьте, помогает ли вам. «SelectedIndexChanged» может вам помочь.

Подробности из MSDN здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...