2016-12-23 5 views
0

시간 컨트롤로 가로 스크롤 막대를 사용하는 windows.form을 만들려고합니다. 그런 다음 시간 값은 85 개의 배열에 대한 배열 인덱스로 사용되고 각 배열 값 (0이 아닌)은지도에 줄로 표시되는 베어링을 포함합니다. 내가 가지고있는 문제는 C#과 이벤트 처리에 익숙하지 않아 hScrollBar1_Scroll의 이벤트 (및 값)를 PaintEventArgs 루프에 연결할 수있는 방법을 찾을 수 없다는 것입니다. 모두 동시에 베어링을 표시 할 수있는 85 개 사이트가 있기 때문에 루프가에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()입니다 : 아래는 내가 해봤 코드의 샘플입니다.

처음에는 "ScrolleventArgs e"와 함께 "PaintEventArgs f"를 사용했지만 이벤트 처리 방법을 모르므로 DrawlinesPoint()는 "f"대신 "null"을 사용했습니다.

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는 [] [] 3 차원 및 베어링 가져온 데이터를 포함하고 2 차원 위치 및 (IDATA)가 기준에 대한 데이터를 보유하고있다.

지도를 지우고 스크롤 바를 통해 시간이 변경 될 때마다 표시된 베어링이 변경됩니다.

누구든지이 코드를 도움이 될 수 있습니까? 내가 잘못된 방향으로이 일을하고있어서 도움을 얻을 수있는 좋은 기회가 있습니다.

답변

0

코드에서 Paint 이벤트를 호출하지 마십시오. Windows는 그릴시기를 결정합니다 (또는 Invalidate 메서드를 호출하여 그리기를 강제 할 수 있습니다).

은 당신이 대신해야 할 것은이 드로잉 코드를 (수행 할 필요가있는 그림 때 호출되는) 컨트롤의 OnPaint 방법을 무시하고 추가 할 수 있습니다 : 당신은 당신의 다른 방법을 호출 할 수 있습니다, 거기에서

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

그 그 논리를 가져라.

더 자세한 답변을 얻으려면 rdataldata과 같은 코드가 더 필요합니다. 그러나 나는 당신이 그것을 이해할 수 있다고 생각합니다.

+0

감사합니다. 내가 지금 잘못하고있는 것을 볼 수 있습니다. 전에 모든 데이터를 메서드 내에 보관하고 메서드 호출을 통해 전달하려고하기 때문에 혼동을 느꼈습니다. 연습이 더 필요해. – Lewish