使用Scrollbar值作为PaintEventArgs循环的参数

时间:2016-12-23 11:46:27

标签: c# winforms event-handling paintevent

我正在尝试创建一个使用水平滚动条作为时间控件的windows.form。然后将时间值用作85个数组的数组索引,每个数组值(不为零)包含一个轴承,然后在地图上显示为一条线。我遇到的问题是我对C#和事件处理都很陌生,所以我找不到将hScrollBar1_Scroll的事件(和值)链接到PaintEventArgs循环的方法。下面是我尝试过的代码示例:

private void hScrollBar1_Scroll(object sender, ScrollEventArgs e, [PaintEventArgs f])
int t = e.NewValue;
//There's a few lines of code here that convert the value of the scrollbar to time and
//display it in a box.
{
    for (int s = 1; s <= 85; s++)
    {
        if (ldata[s, t, 0] != 0)
        {
            DrawLinesPoint(s, t, null);
        }
    }

DrawLinesPoint()处于循环中的原因是因为有85个站点可以同时显示轴承。

起初我尝试将“PaintEventArgs f”作为参数与“ScrolleventArgs e”一起使用,但不知道如何处理该事件,因此DrawlinesPoint()使用“null”而不是“f”。

public void DrawLinesPoint(int s, int t, PaintEventArgs e)
{

    Graphics g = e.Graphics;
    int c = rdata[s,0];
    Pen pen;
    switch (c)
    {
        ...
        //These bearings can be three different colours
    }
    int x1 = rdata[s,1];
    int y1 = rdata[s,2];
    int x2 = rdata[s,1] + ldata[s,t,0];
    int y2 = rdata[s,2] + ldata[s,t,1];


    g.DrawLine(pen, x1, y1, x2, y2);
}

数组rdata []是2维并保存站点的参考数据,ldata []是3维,包含导入的轴承数据。

每次通过滚动条更改时间时,必须清除地图并更改显示的轴承。

任何人都可以帮忙使用此代码吗?我很有可能完全以错误的方式做这件事,所以任何帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

您不会从自己的代码中调用Paint事件。 Windows决定何时绘制(或者您可以通过调用Invalidate方法强制绘制它。)

你应该做的是覆盖控件的OnPaint方法(当需要绘画时调用它)并在那里添加绘图代码:

    protected override void OnPaint(PaintEventArgs e) {
        // Add your drawing code here
    }

从那里,您可以调用其他具有逻辑的方法。

要获得更详细的答案,我们需要更多代码,例如rdataldata。但我想你可以搞清楚。