2011-07-10 17 views
0

私はクラスを通してフォーム上に物事を描こうとしています。ここにコードがあります。また、静的でないフィールド、メソッド、またはプロパティにオブジェクト参照が必要です

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;です。コントロールは静的ではないので、コードを移動する代わりにクラスを介してアクセスする方法と、フォーム自体のコードにコードを再コードする必要があります。

+2

が関数にパラメータとしてそれを取る拡張メソッドにあなたの方法を回し処理するイベントを追加することができますか? – Magnus

答えて

0

あなたの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 
    } 
} 
+0

これは本当に助けていただきありがとうございます。私は拡張機能を作ることを考えなかった。今コーディングに戻り、このプロジェクトを完成させます。 – crzyone9584

0

オプションのカップルが心に春:

  1. は、パラメータとして、実際の参照を渡すためにそれらを得る、すなわち、呼び出し側に問題を渡します。彼らが知らない場合は、発信者にそれを渡すようにしてください。結局のところ、誰かがあなたが使用する必要があるオブジェクトを知っている必要があります。
  2. 関心のある参照が1つしかないとわかっている場合は、オブジェクトが作成されたときにその静的にどこかの参照を格納できます。アプリケーションの構造によっては、オブジェクトのクラス、作成者のクラス、ユーザーのクラス、またはアプリケーションクラスに格納することができます。
関連する問題