各位高手:
在一个项目中,新建一个类,里面写程序。
在Form1窗体中,有一个listBox1。
目标是在程序可能出错的地方,写一个listBox1.Items.Add(“XXXX”);
本人的问题是,怎么样在程序中调用上面的语句?提示找不到listBox1。
在一个项目中,新建一个类,里面写程序。
在Form1窗体中,有一个listBox1。
目标是在程序可能出错的地方,写一个listBox1.Items.Add(“XXXX”);
本人的问题是,怎么样在程序中调用上面的语句?提示找不到listBox1。
解决方案
18
假定我们把 在项目中添加-新建项-类中创建的类 称作 user
那么 user 和 Form1 平级的,互不相扰的
虽然你在 Form1 中可以实例化 user(或直接使用 user 的静态方法),但在 user 中是访问不到 Form1 的成员的,而况 Form1 中的控件都是被设置成了静态的
你可以在实例化 user 的时候将 Form1 传递过去,这样就可以在 user 中通过传递过来的 Form1 的引用,对 Form1 的成员进行操作了
这种方式显然存在着很大的隐患,假如 From1 发生了变化,user 总就得做相应的调整,费神费力不说,还不能保证一下就改全改对
C# 其实已经提供了解决方案,那就是 事件委托
利用这个方案,你需要在 user 中声明一个 事件,和产生该事件的方法。user 中,当你需要发送什么时就调用该方法就可以了
为了传递相关的数据,你可能还需要定义一个事件类为数据。很简单,一般十行以内就搞定
你已经看到,定义的事件只管发出,并不管谁在响应和怎么响应
当 Form1(也可以是 From2或Form3…)对这个来自 user 的事件感兴趣时
只需订阅该事件,并指派一个处理方法。怎么样处理事件传递过来的数据,已经与事件的产生者(user)没什么关系了
这就是分工协作的团队作业
那么 user 和 Form1 平级的,互不相扰的
虽然你在 Form1 中可以实例化 user(或直接使用 user 的静态方法),但在 user 中是访问不到 Form1 的成员的,而况 Form1 中的控件都是被设置成了静态的
你可以在实例化 user 的时候将 Form1 传递过去,这样就可以在 user 中通过传递过来的 Form1 的引用,对 Form1 的成员进行操作了
这种方式显然存在着很大的隐患,假如 From1 发生了变化,user 总就得做相应的调整,费神费力不说,还不能保证一下就改全改对
C# 其实已经提供了解决方案,那就是 事件委托
利用这个方案,你需要在 user 中声明一个 事件,和产生该事件的方法。user 中,当你需要发送什么时就调用该方法就可以了
为了传递相关的数据,你可能还需要定义一个事件类为数据。很简单,一般十行以内就搞定
你已经看到,定义的事件只管发出,并不管谁在响应和怎么响应
当 Form1(也可以是 From2或Form3…)对这个来自 user 的事件感兴趣时
只需订阅该事件,并指派一个处理方法。怎么样处理事件传递过来的数据,已经与事件的产生者(user)没什么关系了
这就是分工协作的团队作业
2
原来如此 那你要知道,你的Form1窗口也是一个类,它和你后来新创建的这个类(就叫NewClass吧)是同一个层次的东西。直接从NewClass类去调用From1里面定义的控件是不可能的。
解决方法是使用事件。也就是将Form1中的方法作为NewClass类中事件的处理程序。这样的话,每当NewClass类触发特定事件,就可以让From1调用自身的ListBox1控件了。也就是实现了你说的“目标是在程序可能出错的地方,写一个listBox1.Items.Add(“XXXX”);” 不懂请追问。