繁体   English   中英

并且非静态字段、方法或属性需要 Object 引用

[英]And Object reference is required for the non-static field, method, or property

我试图通过 class 在表格上绘制东西。 这是代码。

public static void DrawStatBars()
    {
        Graphics g = Graphics.FromImage(Graphic.StatBarBackbuffer);
        Font fnt = new Font("Microsoft Sans Serif", 8, FontStyle.Bold);
        g.DrawImage(Graphic.EmptyHPBar, new Point(12, 12));
        g.DrawImage(Graphic.EmptyManaBar, new Point(12, 35));
        g.DrawImage(Graphic.EmptyEXPBar, new Point(12, 58));
        g.DrawImage(Graphic.HPBar, new Rectangle(12, 15, (int)picHpWidth, Graphic.HPBar.Height), new Rectangle(0, 0, (int)picHpWidth, Graphic.HPBar.Height), GraphicsUnit.Pixel);
        g.DrawImage(Graphic.ManaBar, new Rectangle(12, 38, (int)picManaWidth, Graphic.ManaBar.Height), new Rectangle(0, 0, (int)picManaWidth, Graphic.ManaBar.Height), GraphicsUnit.Pixel);
        g.DrawImage(Graphic.EXPBar, new Rectangle(12, 61, (int)picEXPWidth, Graphic.EXPBar.Height), new Rectangle(0, 0, (int)picEXPWidth, Graphic.EXPBar.Height), GraphicsUnit.Pixel);
        g.DrawString(lblHPText, fnt, new SolidBrush(Color.Black), 40, 15);
        g.DrawString(lblManaText, fnt, new SolidBrush(Color.Black), 40, 38);
        g.DrawString(lblEXPText, fnt, new SolidBrush(Color.Black), 40, 63);
        g.Dispose();


        g = frmMainGame.picGeneral.CreateGraphics;
        g.DrawImage(Graphic.StatBarBackbuffer, new Point(0, 0));
        g.Dispose();
    }

问题是g = frmMainGame.picGeneral.CreateGrpahics; . 由于控件不是 static 我将如何 go 关于通过 class 访问它而不是移动代码并且必须将其重新编码为表单本身的代码。

几个选项 spring 要记住:

  1. 将问题传递给调用者,即让他们将实际引用作为参数传递。 如果他们不知道,请让他们的调用者将其传递等等。毕竟,必须有人知道您需要使用哪个 object。
  2. 如果您知道只有一个感兴趣的引用,那么您可以在创建 object 时将其静态存储在某处。 Depending on the structure of your application you may want to store it in the object's own class, in the creator's class, in the user's class, or in an application class.

您可以添加一个事件来处理您的 PictureBox.Paint 方法

private void picGeneral_Paint(object sender, PaintEventArgs e)
{
    // Use e.Graphics to do your drawing!
    e.Graphics.DrawStatsBars();
}

把你的方法变成扩展方法

public static class GraphicsExtensions
{
    public static void DrawStatsBars(this Graphics g)
    {
        // Your code
    }
}

暂无
暂无

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

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