Как мне динамически добавить несколько строк на вкладку формы windows? - PullRequest
0 голосов
/ 29 мая 2020

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

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

enter image description here enter image description here

Чтобы добавить эти строки, я добавил событие Paint на вкладку в конструкторе как:

this.TabTree.Paint += new System.Windows.Forms.PaintEventHandler(this.PaintLines);

И создал метод

    private void PaintLines(object sender, PaintEventArgs e)
    {
        System.Drawing.Graphics g = e.Graphics;
        int linesLen = Lines.Count();
        for (int i = 0; i < linesLen; i++)
        {
            g.DrawLine(Pens.Red, Lines[i].X1, Lines[i].Y1, Lines[i].X2, Lines[i].Y2);
        }
    }

Это основано на рекомендациях здесь:

https://www.experts-exchange.com/questions/25024010/How-do-I-draw-a-line-on-the-page-of-a-tab-control.html

Я думаю, что мне не хватает кое-что о том, как работают события Paint. Сначала я попытался пройти через главное событие Paint для формы, но не смог отобразить строки на вкладке. Я также хотел бы иметь возможность удалять и обновлять строки, если это возможно.

Если вы можете предоставить какую-либо информацию о том, как лучше динамически реализовать рисование линий на вкладке, или об альтернативном подходе, я был бы очень благодарен. Может быть, способ очистить линии и перерисовать, когда происходит событие прокрутки?

Спасибо.

1 Ответ

0 голосов
/ 30 мая 2020

Я разобрался. Мне нужно, чтобы произошло событие refre sh. Это может произойти с помощью кнопки, как в приведенной ниже ссылке, или, в моем случае, при событии прокрутки. Новый код:

    private void TabTree_Scroll(object sender, ScrollEventArgs e)
    {
        TabTree.Refresh();
        scrollPos = e.NewValue;
    }

    private void PaintLines(object sender, PaintEventArgs e)
    {

        System.Drawing.Graphics g = e.Graphics;
        int linesLen = Lines.Count();
        for (int i = 0; i < linesLen; i++)
        {
            g.DrawLine(penObj, Lines[i].X1, Lines[i].Y1 - scrollPos, Lines[i].X2, Lines[i].Y2 - scrollPos);
        }
    }

Полезная ссылка: https://www.youtube.com/watch?v=Jc5eXYwTROg

...