我有问题,我想要解决。
我有一个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
}
答案 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
}
}