-1

Paint イベントで RedrawLines() メソッドを呼び出すことは効果的でしたが、効果がなかったはずのいくつかの小さな変更を行ったため、問題が発生しています。まず、UserControl を含むタブを切り替えると、以前のように行が再描画されません。さらに、MouseWheel を使用すると、線が完全に描画されず、UserControl の上部と下部で切断されます。しかし、ScrollBar を使用すると、全体が描画されます。何か案が?

必要なポイントを取得した後の DrawLine() メソッドの一部を次に示します。

System.Drawing.Pen myPen;
myPen = new System.Drawing.Pen(Color.Black);
myPen.Width = 3;
System.Drawing.Graphics formGraphics = this.CreateGraphics();

formGraphics.DrawLine(myPen, p1.X, p1.Y, p2.X, p2.Y);
myPen.Dispose();
formGraphics.Dispose();

それで、これを正確に呼び出す RedrawLines メソッドがあります

private void RedrawLines(){
    Graphics g = Graphics.FromHwnd(this.Handle);
    g.Clear(Color.White);
    g.Dispose();
    for (int i =0; i < Set_Of_Connections.Count; i++)
    {
         DrawLine(Set_Of_Connections[i].ins.cb, Set_Of_Connections[i].outs.cb, Color.Green);
    }
}

Paint イベントでこれを呼び出します。

private void Switch_Paint(object sender, PaintEventArgs e)
{
    RedrawLines();
}

しかし、私が言ったように、これはおそらくまったく役に立たないでしょう.

4

1 に答える 1

0

次のようにしてみてください。

public UserControl1() {
  InitializeComponent();
  this.DoubleBuffered = true;
  this.ResizeRedraw = true;
}

protected override void OnPaint(PaintEventArgs e) {
  base.OnPaint(e);

  e.Graphics.Clear(Color.White);
  for (int i = 0; i < Set_Of_Connections.Count; ++i)
  {
     DrawLine(e.Graphics, 
              Set_Of_Connections[i].ins.cb,
              Set_Of_Connections[i].outs.cb,
              Color.Green);
  }
}

protected override void OnMouseWheel(MouseEventArgs e) {
  base.OnMouseWheel(e);
  this.Invalidate();
}

protected override void OnScroll(ScrollEventArgs se) {
  base.OnScroll(se);
  this.Invalidate();
}

Paint イベントから DrawLine メソッドに Graphic オブジェクトを渡し、CreateGraphic 関数を使用する代わりにそこでグラフィック オブジェクトを使用する必要があります。これは単なる一時的な描画であり、DoubleBuffering 設定を無視するため、ちらつきの原因となります。

于 2012-10-26T03:09:37.903 に答える