6

ですから、私は今ではほとんど手がかりがなく、結局それが可能かどうかさえわかりません。Program.csによって実行されるVisualC#フォームがあります(標準的な方法-VSはもちろんすべてのセットアップ作業を行いました)。

それに加えて、1つのクラスを1つのファイルに保持するのが好きだからという理由で、別のC#ファイルに静的メソッドを持つクラスがあります。

私のフォームコードにはパブリック関数があります:

public void print(String text)
{
    rtb_log.appendText("\n" + text);
}

ある時点で、他のクラスから静的関数を呼び出しています。

他のクラスからそのprintメソッドに実際にアクセスすることは可能ですか?rtb_log(リッチテキストボックス)を参照しているため、インスタンス化されている場合にのみ使用可能であり、もちろん静的ではありません。ただし、静的メソッドは静的メンバーにしかアクセスできないため、別のクラスのテキストをフォームに追加する方法については、ここでは少し考えがありません。

ここで何か助けはありますか?

4

2 に答える 2

7

ただし、静的メソッドは静的メンバーにしかアクセスできないため、別のクラスのテキストをフォームに追加する方法については、ここでは少し考えがありません。

静的メンバーはインスタンスメンバーにアクセスできます。メソッドを呼び出すインスタンスを知っている必要があります。だからあなたは書くことができます:

public static void Foo(OtherForm myOtherForm)
{
    // Do some stuff...
    myOtherForm.Print(); // Case changed to comply with naming conventions
}

次に、メソッドを呼び出すときに、関連するフォームへの参照を提供する必要があります。基本的に、どのインスタンスを呼び出すかを決定する必要がありますPrint。誰がその情報を持っているかを調べ、そこからそれを伝えます。この情報を保持するために静的変数を使用しないことをお勧めします。(グローバル状態により、コードの再利用性が低下し、推論が困難になり、テストが困難になります。)

編集:コメントを考えると、それはあなたが望むように聞こえます:

// Within the form
private void HandleClick(object sender, EventArgs e)
{
    SomeClass.StaticMethod(this);
}
于 2012-07-02T16:57:37.237 に答える
2

下記参照

class SomeMainClass
{
    private ClassB form = null;

    private void SomeMethod()
    {
        form = new ClassB();
        form.Show();
        ClassA foo = new ClassA(this);
    }

    // Use an accessor.
    public ClassB Form
    {
        get { return this.form; }
    }
}

class ClassA
{
    private SomeMainClass mainClass = null;

    // Constructor.
    public ClassA(SomeMainClass _mainClass)
    {
        this.mainClass = _mainClass;
    }

    private void SomeMethod()
    {
        this.mainClass.Form.Print("Something to print");
    }
}

class ClassB : Form
{
    // Constructor.
    public ClassB()
    {
        InitializeComponent();
    }

    public void Print(String text) 
    {     
        rtb_log.appendText("\n" + text); 
    } 
}   

編集:これはあなたのコメントに応じた基本的な方法論です。リソースの面ではそれほど効率的ではありませんが、必要なことを実行します...

これがお役に立てば幸いです。

于 2012-07-02T17:00:15.783 に答える