问题描述
看2010入门经典中,菜单功能中有如下功能:IFTYPEOFme.activecontrolistextboxthenctype(me.activecontrol,textbox).undo,上面TYPEOF已经判断me.activecontrol是TEXTBOX了,为啥下面还用CTYPE强制转类型,而且不转还不能用UNDO属性,这个机制是什么呀,头疼死了,到处找不到原因。
解决方案
解决方案二:
去搜索下面向对象编程里有关继承的部分,重新学习下父类和子类的关系
解决方案三:
我最想知道TYPEOF已经判断me.activecontrol是TEXTBOX了,为啥下面还用CTYPE强制转类型
解决方案四:
me.activecontrol是个Control类型啊,Control没有这个Undo方法的啊。不强制转类型就没法调用TextBox的方法的。
解决方案五:
直接转换如果不是textbox那么就会失败崩溃所以要先看看能不能这么做
解决方案六:
引用2楼renjie0310的回复:
我最想知道TYPEOF已经判断me.activecontrol是TEXTBOX了,为啥下面还用CTYPE强制转类型
灰常有道理
解决方案七:
这样说吧,me.activecontrol一个人带着面具Control,而你要他干活Undo,不过有道安检CTYPE拦住了他TYPEOF只是做为判断是否是这个人,然后呢判断完是这个人了,但他面具Control还在呀,所以这个安检CTYPE呢要把他面具给摘下来变成TextBox,才能进去干活Undo
解决方案八:
结贴,c#给拉我答案,说实话vb.net学起来资源太少,c#教材将基础概念讲到家拉。
解决方案九:
代码应该这样写Dimc=CType(Me.ActiveControl,TextBox)IfcIsNotNothingThenc.Undo()
只要进行一次转换。CType相当于c#的as二元操作符,并不是强制类型转换。说“ctype相当于c#的强制类型转换)这就是错的,这种理解就会造成你那种多余进行了一次转换的代码。
解决方案十:
说“ctype相当于c#的强制类型转换”这就是错的,误认为ctype是强制类型转换,于是就额外地先去判断了一次类型继承。这是一个技术问题。你就算是到c#文档中找原因,如果反过来对于自己使用的vb.net的机制(与c#的差别)不熟悉,也会错误套用c#的东西的。
解决方案十一:
引用9楼以专业开发人员为伍的回复:
说“ctype相当于c#的强制类型转换”这就是错的,误认为ctype是强制类型转换,于是就额外地先去判断了一次类型继承。这是一个技术问题。你就算是到c#文档中找原因,如果反过来对于自己使用的vb.net的机制(与c#的差别)不熟悉,也会错误套用c#的东西的。
但入门经典教材说,她就是强制转换类型呀?
解决方案十二:
我也一直认为他是强转不成功会失败的cIsNotNothing没这么写过,因为都是设计上一定能转成功才会这么设计的