まず、あなたPictureBox
はあなたのフィールドである必要がありForm
、ボタンをクリックするたびに作成するべきではありません。第二に、DrawLine
呼び出しが悪いです。たとえば、水平線が必要な場合は、次のようにする必要があります。
Pen pen1 = new Pen(Color.Red);
for (int i = 0; i < pb.Height; i++)
{
g.DrawLine(pen1, 0, i, pb.Width, i);
}
ただし、これは、pictureBox を赤色で塗りつぶすことと同じです。代わりに、i+=2 を更新して 1 行おきにスキップすることをお勧めします。
Pen pen1 = new Pen(Color.Red);
for (int i = 0; i < pb.Height; i+=2)
{
g.DrawLine(pen1, 0, i, pb.Width, i);
}
それでも、CreateGraphic() メソッドを使用せずに、すべての描画を Paint イベント ハンドラーで行うことをお勧めします。これは、フォームが無効になるたびに、図面が消去されるためです。たとえば、ボタンをクリックしたときに設定されるブール値を使用し、true の場合は描画を行います。このようなもの:
public class Form1:Form
{
PictureBox pb;
bool drawLines = false;
public Form1()
{
InitializeComponent();
pb = new PictureBox();
pb.Size = new Size(100,100);
pb.Location = new Point(0,0);
pb.Paint+=new PaintEventHandler(pb_Paint);
this.Controls.Add(pb);
}
private void pb_Paint(object sender, PaintEventArgs e)
{
if(drawLines)
{
Pen pen1 = new Pen(Color.Red);
for (int i = 0; i < pb.Height; i+=2)
{
e.Graphic.DrawLine(pen1, pb.Width, 0, 0, pb.Height);
}
}
}
public void Zimet()
{
drawLines = true; //however this may look redundant, it is still OP's code
}
private void button1_Click(object sender, EventArgs e)
{
Zimet();
}