0

我有我要解决的问题。

我有一个winform application和在我的主要形式(公共部分类 MainWin:Form)我尽量避免使用全局变量。

我有播放按钮单击,在这种情况下,我创建了我的类,该类从我的Listbox.

在这个类中,我有一个属性,如果我想立即停止,我只需将此值设置为 false,但因为我没有将我的类保存为全局我无法从stop button event.

我可以使用其他方式来访问此类吗,或者尽管将我的课程保存为全局,但没有其他方式?

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 对象的引用,除非您存储它的引用并使其可用于 btnStop_Click 事件处理程序。MyClass 对象的范围目前仅限于 btnPlay_Click 方法。

由于您正在为每个 listBoxFiles.Items 实例化 MyClass 的新实例,因此实现此目的的一种方法是维护 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 回答
0

我相信你可能想多了,因为与 C/C++ 等语言相比,在 C# 中定义“全局变量”相当困难。

变量,无论它是属性的成员,都只在类的范围内定义。它在该类之外不容易访问,除非您有该类的引用并且该成员(当然)是公共的。

因此,在 Application 类中创建尽可能多的变量。

于 2013-06-02T11:39:01.497 回答
0

MyClass 中的公共静态属性如何,它不是通常意义上的变量,例如:

public static Boolean play { get; set; }

然后可以访问为:

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