0

私は解決しようとしている問題があります。

winform applicationメイン フォーム (パブリック部分クラス MainWin : フォーム) には、グローバル変数の使用を避けようとしています。

再生ボタンをクリックして、そのイベントで自分のファイルを自分のListbox.

このクラス内には、すぐに停止したい場合はこの値を false に設定するというプロパティがありますが、クラスをグローバルとして保存していないため、からこのクラスにアクセスできませんstop button event

このクラスにアクセスするために他の方法を使用できますか、またはクラスを global として保存しても他の方法はありませんか?

ListBox listBoxFiles;

private void btnPlay_Click(object sender, EventArgs e)
{
    for (int i = 0; i < listBoxFiles.Items.Count; i++)
    {
        myClass class = new MyClass();
        class.play...
    }
}

    private void btnStop_Click(object sender, EventArgs e)
    {
       // i cannot reach myClass from here
    }
4

3 に答える 3

0

次のように、通常の意味で変数ではない MyClass の public static プロパティはどうですか。

public static Boolean play { get; set; }

次に、次のようにアクセスできます。

private void btnStop_Click(object sender, EventArgs e)
{
   MyClass.play = false;
 }
于 2013-06-02T12:10:53.757 に答える
0

C/C++ のような言語と比較して、C# で「グローバル変数」を定義するのはかなり難しいため、これについて考えすぎている可能性があると思います。

変数は、プロパティのメンバーであるかどうかにかかわらず、クラスのスコープ内でのみ定義されます。クラスの参照がなく、メンバーが(もちろん)パブリックでない限り、そのクラスの外では簡単にアクセスできません。

そのため、Application クラス内で必要な数の変数を作成してください。

于 2013-06-02T11:39:01.497 に答える
0

参照を保存して btnStop_Click イベント ハンドラで使用できるようにしない限り、MyClass オブジェクトへの参照にアクセスすることはできません。MyClass オブジェクトのスコープは現在、btnPlay_Click メソッド内のみに制限されています。

listBoxFiles.Items ごとに MyClass の新しいインスタンスをインスタンス化しているため、これを実現する 1 つの方法は、MyClass インスタンスのリスト (または item/MyClass の辞書) を維持し、btnStop_Click イベント ハンドラーで同じものを使用することです。 .

private List<MyClass> listMyClass = new List<MyClass>();

private void btnPlay_Click(object sender, EventArgs e)
{
    for (int i = 0; i < listBoxFiles.Items.Count; i++)
    {
        myClass classObj = new MyClass();
        listMyClass.Add(classObj); //store the reference
        classObj.play...
    }
}

private void btnStop_Click(object sender, EventArgs e)
{
   foreach(var obj in listMyClass)
   {
    obj.play = false; //do wahatever you want to do with your MyClass object
   }       

}
于 2013-06-02T12:22:32.767 に答える