问题描述
高手们帮忙看一下,就下面一段代码,F5执行无什么异常,可F8单步调试就出这样的错误,什么原因啊?谢谢啦!ImportsSystem.TextPublicClassForm1PrivateDeclareFunctionGetWindowDCLib"user32"Alias"GetWindowDC"(ByValhwndAsInteger)AsIntegerPrivateDeclareFunctionGetTextExtentPoint32&Lib"gdi32"Alias"GetTextExtentPoint32A"(ByValhdcAsInteger,ByVallpszAsString,ByValcbStringAsInteger,ByReflpSizeAsSize)PrivateDeclareFunctionReleaseDCLib"user32"(ByValhwndAsInteger,ByValhdcAsInteger)AsIntegerPrivateDeclareFunctionSelectObjectLib"gdi32"(ByValhdcAsInteger,ByValhObjectAsInteger)AsIntegerPublicFunctionGetStringSize(ByValvTextAsString,ByRefvFontAsFont)AsSize'待测量的字符串DimSAsString=vText'待测量的字体DimfAsFont=vFont'通过默认编码获取字符串长度,这种编码是半角一个字符,全角两个字符,只有这样才符合要求DimlAsInteger=Encoding.Default.GetBytes(S).Length'声明设备上下文DimDCAsInteger=GetWindowDC(Form.ActiveForm.Handle.ToInt32)'将字体句柄传入系统SelectObject(DC,f.ToHfont.ToInt32)'准备传址的参数,字体尺寸将被保存在该尺寸中DimmySizeAsSize'通过GetTextExtentPoint32函数获取尺寸GetTextExtentPoint32(DC,S,l,mySize)'释放设备上下文ReleaseDC(Form.ActiveForm.Handle.ToInt32,DC)'返回变量ReturnmySizeEndFunctionPrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickDimTextFontAsNewSystem.Drawing.Font("Arial",24,FontStyle.Bold)DimsAsString="HelloWorld!"DimmySizeAsSizemySize=GetStringSize(s,TextFont)MsgBox(mySize.Height.ToString)EndSubEndClass
解决方案
解决方案二:
声明,不好意思啊,小弟是新手,没积分,有了一定补偿还请大虾们鼎力相助啊
解决方案三:
我本来是要拿图片展示的,后来还是把代码发了上来,但第一句说明性语句忘了作修改。反正我得问题就是:F5执行没什么,可F8单步调试就出现“未将对象引用设置到对象的实例”的错误
解决方案四:
Form.ActiveForm是nothing的原因吧,代码跟踪下。F5执行得到的值也不是你想要的吧
解决方案五:
不知道错在哪
解决方案六:
你加上Try....Catch.....EndTry,看一下
解决方案七:
引用3楼yanlongwuhui的回复:
Form.ActiveForm是nothing的原因吧,代码跟踪下。F5执行得到的值也不是你想要的吧
正确,单步调试的时候得不到Form.ActiveForm所以错误