0

私にはgridクラスとMainWindowクラスがあります。Grid のクラス関数は、MainWindow の関数を呼び出す必要があります。

    // function from grid class:
    public Point functionFromGridClass()
    {
        Point variable = MainWindow.functionFromMainWindowClass(0, 0);
        // ...
    }
    // function from MainWindow class:
    public static Point functionFromMainWindowClass(int x, int y)
    {
        Vector2 mouse;
        mouse.X = x;
        mouse.Y = y + (ClientRectangle.Height - glview.Size.Height);
        // ...
    }

staticのキーワードを削除するfunctionFromMainWindowClassと、グリッド クラスから呼び出すことができなくなります。キーワードを削除しないとstatic、MainWindow のクラス変数を使用できず、警告が表示されます。私はこの問題に直面したことがありません。解決策は何ですか?ClientRectangleglview"An object reference is required for the non-static field, method, or property"

4

4 に答える 4

2

「非静的フィールド、メソッド、またはプロパティにはオブジェクト参照が必要です」という警告が表示されます

警告は何をすべきかを教えてくれます: インスタンス メソッドを呼び出すにはインスタンスが必要です。

したがって、メソッドから static キーワードを削除し、Grid クラスで のインスタンスを作成してMainWindow、メソッドを呼び出せるようにすることができます。

var mainWindow = new MainWindow();
var result = mainWindow.functionFromMainWindowClass(5, 6);
于 2013-03-30T10:37:37.390 に答える
2

グリッド クラスは MainWindow のインスタンスの参照を保持する必要があり、おそらく構築時にグリッドに提供されます。

public class GridClass
{
  private MainWindow window;
  public GridClass( MainWindow Window)
  {
     window = Window;
  }
  public Point functionFromGridClass()
  {
     Point variable = window.functionFromMainWindowClass(0, 0);
  }
}
于 2013-03-30T10:52:35.433 に答える
0

何が起こっているのかを正確に知らずに具体的なアドバイスをするのは難しいですが、一般的な状況としてはMainWindow、メソッドを呼び出したいクラスのインスタンスを、Grid構築時に渡すなどして、何らかの方法で取得する必要があるということです。リソースマネージャーから取得します。

于 2013-03-30T10:43:08.553 に答える
0

静的メソッドは、className を参照して呼び出されます。次のようにメイン ウィンドウ クラス関数を呼び出します。

public Point functionFromGridClass()
{
     MainWindowClass.functionFromMainWindowClass(val1, val2);

}
于 2013-03-30T10:47:00.213 に答える