首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >DrawRectangle不起作用

DrawRectangle不起作用
EN

Stack Overflow用户
提问于 2017-02-27 11:17:51
回答 1查看 725关注 0票数 0

我在一个由我创建的类上有一个矩形。函数"DrawRectangle“没有画任何东西。我把代码写在下面:

我自己的课程(Unidad.cs):

代码语言:javascript
运行
复制
class Unidad
{
    //Constructor
    public Unidad(string tipo, int movimiento)
    {
        tipoUnidad = tipo;
        movimientoUnidad = movimiento;
    }

    //Propiedades
    public string tipoUnidad {get; set;}
    public int movimientoUnidad { get; set; }

    //Método para dibujar unidad
    public void colocar(MouseEventArgs e)
    {            
        Form1 myf = new Form1();

        using (Graphics g = myf.picboxFondo.CreateGraphics())
        {
            Pen pen = new Pen(Color.Red, 2);

            g.DrawRectangle(pen, e.X, e.Y, 20, 20);

            pen.Dispose();
            g.Dispose();
        }
    }
}

主修班:

代码语言:javascript
运行
复制
public partial class Form1 : Form
{
    //Prueba de clase
    Unidad prueba;

    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        picboxFondo.Size = ClientRectangle.Size;
        prueba = new Unidad("I", 20);
    }

    private void picboxFondo_MouseDown(object sender, MouseEventArgs e)
    {
        prueba.colocar(e);
    }
}

我有picboxFondo修饰符公开。所有的编译都是正确的,工作也很完美,但是当我转到g.DrawRectangle时,我看到所有的值都是可以的,但是它没有绘制任何东西。

你能帮帮我吗?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-27 11:28:56

您正在为您的Form1类创建一个新实例,并尝试使用该新实例的PictureBox (根本没有显示)。

相反,可以将要作为参数绘制的控件传递给colocar方法:

代码语言:javascript
运行
复制
public void colocar(Point p, Control control)
{
    using (Graphics g = control.CreateGraphics())
    {
        using (Pen pen = new Pen(Color.Red, 2))
        {
            g.DrawRectangle(pen, p.X, p.Y, 20, 20);
        }
    }
}

用你的方式这样称呼它:

代码语言:javascript
运行
复制
private void picboxFondo_MouseDown(object sender, MouseEventArgs e)
{
    prueba.colocar(e.Location, picboxFondo);
}

我还更改了方法,以便只传递MouseEventArgsMouseEventArgs,因为绘图方法不需要了解任何有关鼠标事件的信息,只需要了解Point

请注意,不需要在PenGraphics上调用usingusing语句正在为您执行此操作。

您可以考虑使用.NET命名约定并重命名方法Colocar

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42484453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档