Управление вкладками рисования и границы ведут себя странно - PullRequest
0 голосов
/ 19 марта 2020

Хорошо, я пытался выяснить эти 2 вопроса часами. Во-первых, у меня есть вкладка, которую я рисую, и я рисую кнопку X. У меня это так, что когда вы наводите на него курсор, он нарисует вокруг него белую рамку. Однако это не работает для первой вкладки. ТОЛЬКО ПЕРВЫЙ СТОЛ. Кажется, что расчеты положения неверны. Вот фрагмент моего кода:

            base.OnMouseMove(e);

            for (int i = 0; i < TabCount; i++)
            {
                TabPage page = TabPages[i];

                Rectangle tabRect = GetTabRect(i);

                Rectangle rect = new Rectangle(tabRect.Right - 17, 13, 12, 12);
                if (rect.Contains(e.Location) && (highlightedPage == null)) //It detects that the x button is hovered over perfectly for all but the first tab.
                {
                    highlightedPage = page;
                    Invalidate();
                    break;
                }
                else if (highlightedPage != null)
                {
                    highlightedPage = null;
                    Invalidate();
                }
            }

Событие рисования:

                        if (highlightedPage != null && (highlightedPage == TabPages[i]))
                        {
                            Rectangle rect = new Rectangle(tabRect.X + tabRect.Width - 17, 13, 12, 12);

                            using (SolidBrush solidBrush = new SolidBrush(Color.FromArgb(80, Color.White)))
                            {
                                e.Graphics.FillRectangle(solidBrush, rect);
                            }
                        }

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

Я использовал TextRenderer с FormatFlags Left и VerticalCenter, но это не сработало. Я использую

e.Graphics.DrawString(page.Text, Font, whiteBrush, new Rectangle(tabRect.X + 28, tabRect.Y, tabRect.Width - 45, tabRect.Height), CenterStringFormat);

, но в конце концов, с достаточным количеством текста, он будет go вне границ. (CenterStringFormat - это просто LineAlignment center и Near)

Кто-нибудь может мне помочь с этими двумя проблемами? Спасибо

РЕДАКТИРОВАТЬ: Хорошо, я выяснил второй вопрос с рисованием шрифта. Оказывается, элемент управления вкладками может определять размер вкладок, но только для шрифта по умолчанию, Microsoft Sans Serif 8.25. Если я попробую Consolas 9, элемент управления вкладками не будет знать, как его расширить.

...