2016-12-23 9 views
0

時間のコントロールとして水平スクロールバーを使用するwindows.formを作成しようとしています。次に、時間値は85個の配列の配列インデックスとして使用され、各配列値(ゼロではない)にはベアリングが含まれ、ベアリングがマップ上に線として表示されます。私が持っている問題は、C#とイベントハンドリングの新機能で、hScrollBar1_Scrollのイベント(と値)をPaintEventArgsループにリンクする方法が見つからないということです。以下は、私が試したコードのサンプルです: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); 
     } 
    } 

すべて同時にベアリングを表示することができ85件のサイトがあるので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 [] 2次元と3次元である、インポートベアリングデータを含む[]部位とLDATAのための基準データを保持します。

スクロールバーで時間を変更するたびにマップをクリアし、表示されたベアリングを変更する必要があります。

誰でもこのコードを助けることができますか?私はこれを間違ったやり方でやっているので、どんな助けもありがたいことです。

答えて

0

あなた自身のコードからPaintイベントを呼び出さないでください。 Windowsはいつ描画するかを決定します(または、Invalidateメソッドを呼び出すことによって描画を強制することができます)。あなたの代わりに何をすべき

が(塗装時に実行する必要があります呼び出される)コントロールのOnPaintメソッドをオーバーライドして、そこにあなたの描画コードを追加します:

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

そこから、あなたはそのあなたの他のメソッドを呼び出すことができます論理を持っている。

さらに詳しい回答を得るには、rdataldataのようなコードが必要です。しかし、私はあなたがそれを理解することができると思います。

+0

ありがとう私は今何が間違っていたか見ることができます。私はすべてのデータをメソッド内に保持していて、メソッド呼び出しを通じてそれを渡そうとしていたので、前もって混乱していました。私はより多くの練習が必要... – Lewish

関連する問題