设置未从其他方法定义为全局的类属性

时间:2013-06-02 11:31:08

标签: c# winforms

我有问题,我想要解决。

我有一个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
    }

3 个答案:

答案 0 :(得分:0)

我相信你可能会过度思考这一点,因为与C / C ++等语言相比,在C#中定义“全局变量”相当困难。

变量,无论是属性的成员,只在类的范围内定义。除非你有班级的参考资料,而且会员(当然)是公开的,否则在课堂之外不容易获得。

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

答案 1 :(得分:0)

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

public static Boolean play { get; set; }

然后可以访问:

private void btnStop_Click(object sender, EventArgs e)
{
   MyClass.play = false;
 }

答案 2 :(得分:0)

除非存储其引用并使其可用于btnStop_Click事件处理程序,否则无法访问对MyClass对象的引用。 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
   }       

}