2012-04-20 16 views
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

static方法はにのみ直接アクセスできますクラスのメンバーで、クラスのインスタンスメンバーを使用する場合は、クラスのインスタンスをメソッドに渡す必要があります(または、シングルトンの場合と同様にstaticとして利用可能にする必要があります)。

private static int getControlHeightToUse(Panel thePanel) 
{ 
    return (thePanel.Height/NUMBER_OF_ROWS); 
} 
それからちょうどコールに dynamicPanelに渡し

...

したがって、あなたは静的であることができることから、それを妨げているインスタンスメンバーに取るようにあなたの方法を変更することができますただし、インスタンスメソッドはstaticのメンバーにアクセスできます。 staticメンバーはすべてのインスタンス間で共有され、クラスのインスタンスが存在しない場合でも存在することに注意してください。したがって、彼らはあなたが話しているインスタンスを知らないのでインスタンスメンバーを呼び出すことはできません。静的メソッドのパラメータとして

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(); 

    } 
} 
以下
関連する問題