繁体   English   中英

显示后如何立即使用C#在图片框上绘制字符串?

[英]How to draw a string on a picturebox with C# immediately after I show it?

我有一个名为Menu.cs的主窗口形式,在此类中,我有两个名为“ lines”和“ Menu.cs ”的按钮,每个按钮都打开各自的窗口。 多边形有一个图片框,我必须绘制x和y轴

private void botonPoligonos_Click(object sender, EventArgs e) 
{
    WindowPolygons objPolygons = new WindowPolygons();
    objPolygons.Show();
}

实际上,我使用一个名为“ drawAxes”的按钮来完成此操作:

public void drawAxes_Click() 
{
    drawAxes();
}

public void drawAxes()
{
    Graphics papel = pictureBox1.CreateGraphics();
    Pen lapiz = new Pen(Color.Black);
    //Dibujo de ejes X y Y
    papel.DrawLine(lapiz, 20, 425, 742, 425);
    papel.DrawLine(lapiz, 20, 425, 20, 20);
    papel.DrawString("X", myFont, Brushes.Black, new Point(745, 418));
    papel.DrawString("Y", myFont, Brushes.Black, new Point(14, 5));
}

但是我不想使用按钮来完成操作,我想绘制轴,因为显示了drawAxes() ,我已经尝试将方法drawAxes()放在构造函数中, WindowPolygons.cs的加载器中以及下面objPolygons.show()但没有任何反应,有人知道该怎么做吗?

这是我第一次发问,谢谢:)

使用以下代码和以下设置:

private void drawAxes(Graphics g, Rectangle rect)
{
    Pen lapiz = new Pen(Color.Black);
    //Dibujo de ejes X y Y
    g.DrawLine(lapiz, 20, rect.Height - 20, rect.Width - 20, rect.Height - 20);
    g.DrawLine(lapiz, 20, rect.Height - 20, 20, 20);
    g.DrawString("X", Font, Brushes.Black, new Point(rect.Width - 17 , rect.Height - 27));
    g.DrawString("Y", Font, Brushes.Black, new Point(14, 5));
}

private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
    drawAxes(e.Graphics, pictureBox1.Bounds);
}

private void pictureBox1_Resize(object sender, EventArgs e)
{
    pictureBox1.Invalidate();
}

将pictureBox1停靠在表单上(属性Dock设置为Fill ),以便它随表单自动增长。

将方法pictureBox1_Paint附加到pictureBox1_Paint的Paint-Event。

将方法pictureBox1_Resize附加到pictureBox1_Resize的Resize-Event。

pictureBox1_Resize()Invalidate()的调用要求pictureBox1在其大小更改后重新绘制。

当需要绘制图片框时,会自动调用pictureBox1_Paint()方法,这是因为初始显示或尺寸已更改或其他任何原因。 它调用drawAxes进行实际绘制,并传递要绘制的Graphics对象和图片框的当前大小。

在构造函数或窗体加载中,窗体仍未绘制。 因此将方法放在元素的表单绘制事件上:

protected void pictureBox1_Paint(object sender, PaintEventArgs e)
{
   Graphics papel = e.Graphics();
   Pen lapiz = new Pen(Color.Black);
   //Dibujo de ejes X y Y
   papel.DrawLine(lapiz, 20, 425, 742, 425);
   papel.DrawLine(lapiz, 20, 425, 20, 20);
   papel.DrawString("X", myFont, Brushes.Black, new Point(745, 418));
   papel.DrawString("Y", myFont, Brushes.Black, new Point(14, 5));
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM