2

動的に作成したいいくつかのコントロールのために持っているスペースをプログラムで決定したいと思います。そこで、コンテナの高さを取得し、それを行数(定数)で除算したいと思います。

私はこの関数を持っています(このコードはdynamicPanelという名前のパネルが存在するフォームの一部です):

private static int getControlHeightToUse() {
  return (dynamicPanel.Height / NUMBER_OF_ROWS);
}

...これにより、コンパイル時エラーが発生します。「*非静的フィールド、メソッド、またはプロパティにオブジェクト参照が必要です。RememberNextGen_CRLogins.CRLoginsMainForm.dynamicPanel'*」

私はそれが私に何を伝えようとしているのか/それが何を望んでいるのか理解していません。

「静的」を削除した場合:

private int getControlHeightToUse() {
  return (dynamicPanel.Height / NUMBER_OF_ROWS);
}

...次に、コンパイル時エラーが発生します。「*フィールド初期化子は、非静的フィールド、メソッド、またはプロパティ'TitanNextGen_CRLogins.CRLoginsMainForm.getControlHeightToUse()'*を参照できません。」

...以下の表示行:

public partial class CRLoginsMainForm : Form {

  int controlHeight = getControlHeightToUse(); // <-- err
4

2 に答える 2

4

staticメソッドはクラスのメンバーに直接アクセスすることしかできませstaticん。クラスのインスタンス メンバーを使用する場合は、クラスのインスタンスをメソッドに渡す必要があります (またはstatic、シングルトンの場合のように、クラスのインスタンスを として使用できるようにします)。 .

したがって、メソッドを変更して、静的にすることを妨げているインスタンス メンバーを取り込むことができます。

private static int getControlHeightToUse(Panel thePanel) 
{
  return (thePanel.Height / NUMBER_OF_ROWS);
}

その後dynamicPanel、電話に出てください...

ただし、インスタンス メソッドはstaticメンバーにアクセスできます。メンバーstaticはすべてのインスタンス間で共有され、クラスのインスタンスが存在しなくても存在することに注意してください。したがって、どのインスタンスについて話しているのかわからないため、インスタンスメンバーを呼び出すことはできません。

于 2012-04-20T18:35:29.443 に答える
2

dynamicPanel をパラメーターとして静的メソッドに渡す

public partial class CRLoginsMainForm : Form {

  int controlHeight = getControlHeightToUse(dynamicPanel);

以下のように getControlHeightToUse を変更します

private static int getControlHeightToUse(Panel panel) {
  return (panel.Height / NUMBER_OF_ROWS);
}

静的メソッドから非静的メソッドを呼び出したい場合は、以下のようにすることができます

public class Foo
{
    // public method 
    public void Method1()
    {
    }

    public static void Data2()
    {
        // call public method from static method
        new Foo().Method1();

    }
}
于 2012-04-20T18:36:46.787 に答える