PictureBox
はUserControl
です。私はこれをメインフォームにUser Control
と追加しました。今私は、ボタンを押して、ユーザーコントロール上に行を作成する必要があります。私のプロジェクトでは、このボタンを押すたびに、2つのPointF(xとy)のパラメータをユーザーコントロールに送信し、既存のものに加えて新しい行を描画したいと考えています。私はこれまでにpictureboxがロードされたときにPaint
イベントを持っています。親からPictureBoxに線を描く
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
Pen graphPen = new Pen(Color.Red, 2);
PointF pt1D = new PointF();
PointF pt2D = new PointF();
pt1D.X = 0;
pt1D.Y = 10;
pt2D.X = 10;
pt2D.Y = 10;
e.Graphics.DrawLine(graphPen, pt1D, pt2D);
}
'CreateGraphics'と' e.Graphics'は全く同じものではありません。ユーザーがフォームを最小化して元に戻す場合、バージョンによって図面が保持されません。 – LarsTech
私は半分あなたに同意するでしょう。描画されたものは、フォームやピクチャボックスを強制的に再描画するようなイベントが発生した後にすべて消えますが、CreateGraphicsとe.Graphicsは同じGraphicsクラスのインスタンスを返します。ペイントハンドラで行われた変更は、すべての再描画の後に呼び出されるため、保持されます。実行する必要があるのは、クリックハンドラに描画された線を保持し、ペイントで描画することです。私は少なくとも変更を保存するために私の質問を更新します。 – Abbas
ありがとうございました。メインフォームのボタンを押す必要があることに注意してください。画像ボックスはユーザーコントロール内にあります。このメソッドにパラメータ(x、y、linecolorなど)を送信し、これらのパラメータに従って線を描くことができます。 – Avrum