编程语言

img GnuDoyng

你是如何处理“对非共享成员的引用要求对象引用”这个问题的?

发表于2004/10/4 3:17:00  8760人阅读

分类: 涕淌技術區

我们在Visual Basic .NET中编写一个窗体时,实际上是在写一个类,写完后按F5,居然就能运行!原来VB已经自行帮我们创建了这个类的一个实例了,不可思议吧!

你可能觉得这是那么地理所当然,根本无需去理会它吧!呵呵,大多数情况下确实是这样的。但是,如果你在程序中又编写了另外一个窗体并且创建了它的一个实例,你想在新窗体中通过点击一个按键来调用主窗体的某个数据成员或某个方法,你会怎么实现呢?

我先说一个最搓的方案(我想应该是我独创的呵呵):在主窗体中添加一个Timer1控件,Timer1每Tick一次,你就让程序判断一下新窗体的按键是否被按,如果是的话,则调用事件——如果你把Interval值设得小一点就会模拟得很像的。很龌龊是吧?但是我在几个月之前写程序还经常用到这种方法,没办法,那时候没有掌握技术呀!说简单了,我们所有的问题就归结在如何解决“对非共享成员的引用要求对象引用”这个问题。

你可能早就按捺不住地要开骂了,怎么不通过模块中的Sub Main来创建一个主窗体实例呢?是呀,这真是一个可行的办法,的确是可行的——但是并不实际,所以我并不想在这里多说。

大家都看过《骇客帝国》吧?里面的那个坏头子,每次复制了自己,都不忘说几句“Me Me Me”呵呵!对呀,每个窗体的实例就是Me呀!

关键是,怎么把Me传给新窗体呢?动点脑筋,有什么事件是直接把主窗体和新窗体联系在一起的呢?哈当然是新窗体的New的实例构造函数了。虽然这个Sub New默认情况下是没有参数的,不过我知道这个难不倒你啦。你只需重写一下,把重载过的Sub New中的参数设为“ByVal ThisForm As frmMain”,然后定义一个全局变量在Sub New中来接收主窗体的Me就OK啦!

这样的问题,一般的书上是找不到答案的。我不知道是他们觉得这种方法简单得没必要说,还是那些写书的人水平本来就不高。反正,如果你想学东西,就别总是抱着本书躲在家里念,多多关注一下网络资源呵呵。

阅读全文
0 0

相关文章推荐

img
取 消
img