Можно ли удалить пунктирный прямоугольник фокуса над вкладками в TabControl? - PullRequest
9 голосов
/ 07 марта 2011

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

Я установил для свойства TabStop элемента TabControl значение false. Однако если я щелкну вкладку и нажму клавишу Tab, вокруг имени вкладки появится пунктирный прямоугольник.

Я попытался создать свой собственный TabControl и попробовал это

class MyTabControl : TabControl
{
        public MyTabControl()
        {
            TabStop = false;
            DrawMode = TabDrawMode.OwnerDrawFixed;
            DrawItem += new DrawItemEventHandler(DoMoreTabControl_DrawItem);
            Invalidate();
        }
}

Однако пунктирный прямоугольник все еще появляется.

Я также пытался переопределить метод MyTabControl.OnPaint(), но это не помогает.

Есть ли способ достичь этого?

Ответы [ 2 ]

3 голосов
/ 31 октября 2017

Установите фокус на вкладку вместо заголовка (как это)

private void tabControl1_Click(object sender, EventArgs e)
{
    (sender as TabControl).SelectedTab.Focus();
}

Вы увидите пунктирный прямоугольник в течение миллисекунды, как только указанное событие будет выполнено, оно исчезнет.

Кроме того, чтобы удалить пунктирный прямоугольник для выбранной по умолчанию вкладки при загрузке

private void tabControl1_Enter(object sender, EventArgs e)
{
    (sender as TabControl).SelectedTab.Focus();
}

Оба эти изменения работали для меня! надеюсь, это кому-нибудь поможет.

2 голосов
/ 07 марта 2011

Да, событие DrawItem. Вы не опубликовали это, невозможно догадаться, что с ним не так. Просто убедитесь, что вы не звоните e.DrawFocusRectangle(), что может произойти при копировании примера кода MSDN. Достаточно просто удалить утверждение. Рассмотрите возможность использования другого цвета фона или стиля шрифта текста в качестве альтернативы, чтобы подсказка о фокусе не была полностью потеряна.

...