现象:有一次在修改了某些代码后,确认是没错的,把代码签入(check in)到VSS中,在我机上还保留着check out状态,另一个同事取了我最新的代码。运行时弹出警告窗口"can't edit module" 奇怪,我们是在运行,不是在编辑呀,他只是取下来运行,并且我在check in前也运行正常的。怎么现在会出现这么奇怪的错误呢。我在我的机器上又运行了一遍,还是没问题。

原因:百思不得其解的时候,我把代码完全的check in再运行,嗨,我自己的机器也出问题了。在他那里check out 没问题,重新check in 又有问题了。在网上找了一番也没找到正确的原因。

我们冷静下来仔细分析,这种警告以前都是在编辑的时候,由于文件是只读的才会提出警告。我们是有VSS来管理代码的,如果是check in状态,它就是只读的没错,但我们是在运行不是在编辑它呀。那是否意味着VB自动会修改部分代码呢。又哪些代码会被它修改呢。

解决:再仔细的查看代码,发现是有个事件处理程序里面是空的。难道就是这个。把哪个空的处理程序删除后,check in再运行就再也没有出错了。

总结:VB里面的事件处理程序名字是固定的,不象.net那样需要绑定委托。如果一个事件的处理里面是空的话,在运行时,VB会尝试把哪个过程去掉。但在VSS环境下,check in了是只读的。VB自己也不能修改这个文件。结果就弹出"can't edit module"警告窗口了。