我如何动态地向Windows窗体选项卡添加多行?

问题描述 投票:0回答:1

我正在尝试向选项卡动态添加行的集合,但是在加载之后,它们将无法继续正确显示。最终我希望拥有几百个。

起初它看起来像第一个版本,但是在滚动行之后看起来像第二个版本。

enter image description hereenter 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事件,但是无法使行显示在选项卡上。如果可能,我还希望能够删除和更新这些行。

如果您能提供有关如何更好地动态地将线图绘制到选项卡的任何信息,或者我可以通过另一种方法,将不胜感激。也许是一种清除线条并在滚动事件发生时重画的方法吗?

谢谢。

winforms tabs windows-forms-designer paintevent
1个回答
0
投票

我知道了。我需要发生刷新事件。这可以通过下面链接中的按钮发生,或者在滚动事件中以我为例。新代码:

    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

© www.soinside.com 2019 - 2024. All rights reserved.