При удалении TabPage из TabControl, как выбрать следующий раз в tabcontrol? C# - PullRequest
0 голосов
/ 09 января 2020

Я использую TabControl, и я удаляю TabPage s динамически. Когда пользователь удаляет TabPage, я хочу, чтобы он выбрал предыдущий номер, например, если сумма TabPage s была 11 , и вы удалили один, он выбрал бы TabPage 10 .. Вместо этого по умолчанию используется значение TabPage 1 . Почему он по умолчанию возвращается к 1 и как можно сделать sh это?

Что я пробовал ..

            int tc = tabControl1.TabCount;

            tabControl1.TabPages.RemoveAt(myTabNumber);

            tc--;

            tabControl1.SelectedIndex = tc;

Это не работает, но все равно по умолчанию возвращается 1 .

Любая помощь приветствуется:)

Ответы [ 2 ]

2 голосов
/ 09 февраля 2020

Звучит так, как будто вы пытаетесь реализовать кнопку Закрыть для вашего TabControl, а затем перейти к правильному TabPage (по указателю)

Чтобы получить полный код, см. Здесь.

Для части кода, здесь (Место в TabControl MouseDown):

        for (var i = 0; i < this.tabControl1.TabPages.Count; i++)
        {
            var tabRect = this.tabControl1.GetTabRect(i);
            tabRect.Inflate(-2, -2);
            var imageRect = new Rectangle(tabRect.Right - CloseImage.Width,
                                     tabRect.Top + (tabRect.Height - CloseImage.Height) / 2,
                                     CloseImage.Width,
                                     CloseImage.Height);
            if (imageRect.Contains(e.Location))
            {
                if (tabControl1.TabCount > 1)
                {
                    this.tabControl1.TabPages.RemoveAt(i);

                    this.tabControl1.SelectedIndex = i - 1; // Added this bit myself, you won't find it in the answer in the link

                    return;
                }
                else
                {
                    return;
                }
            }
        }

Ответ в ссылке содержит остаток кода .

i, который будет TabPage index , используется для удаления требуемого TabPage и перехода к правильному номеру TabPage, если существует один .

this.tabControl1.SelectedIndex = i - 1; Переход к удаленному TabPage ' индекс s, -1 . Если нет TabPage для навигации, например, если вы удалили TabPage 4 , но вы уже удалили TabPage 3 ранее, по умолчанию будет TabPage 1 .

Надеюсь, это поможет вам.

0 голосов
/ 09 января 2020

На самом деле, я понял это буквально через минуту после публикации моего вопроса, я надеюсь, что это поможет всем, кому это нужно.

Если у вас было 3 вкладки, и вы удалили одну, то просто возвращаюсь к TabPage 1. Но если вы используете это ..

            int tc = tabControl1.SelectedIndex;


            tabControl1.TabPages.RemoveAt(yourTabNumber);

            tc--;

            tabControl1.SelectedIndex = tc;

Тогда он выберет TabPage 2 (или любой другой номер)

Измените yourTabNumber на TabPage s SelectedIndex

Надеюсь, это кому-нибудь поможет:)

...