我正在尝试创建一个使用水平滚动条作为时间控件的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维,包含导入的轴承数据。
每次通过滚动条更改时间时,必须清除地图并更改显示的轴承。
任何人都可以帮忙使用此代码吗?我很有可能完全以错误的方式做这件事,所以任何帮助都会受到赞赏。
答案 0 :(得分:0)
您不会从自己的代码中调用Paint
事件。 Windows决定何时绘制(或者您可以通过调用Invalidate
方法强制绘制它。)
你应该做的是覆盖控件的OnPaint
方法(当需要绘画时调用它)并在那里添加绘图代码:
protected override void OnPaint(PaintEventArgs e) {
// Add your drawing code here
}
从那里,您可以调用其他具有逻辑的方法。
要获得更详细的答案,我们需要更多代码,例如rdata
和ldata
。但我想你可以搞清楚。