錯誤提示:
System.ArgumentNullException:Value cannot be null.
Parameter name:dc
at System.Windows.Forms.TextRenderer.MesureText(IDeviceContext dc, String text, Font font, Size proposedSize, TextFormatFlags flags)
……(下面連着一大串異常信息)
根據錯誤提示,是因為dc這個參數等於null了,導致調用TextRenderer.MesureText()這個函數報錯。上網搜了一下這個函數的用法,可以看一下:
http://www.voidcn.com/article/p-fmczttqu-nz.html
官網的解釋:
總之,這個函數時用於在 Windows 窗體控件上測量和繪制文本,而dc這個參數是繪制文本所使用的設備上下文(Device Context)。設備上下文或許可以理解為要繪制控件的畫布。此時dc為null,說明程序在此處沒有獲取到設備上下文。
根據網上查閱到的資料,我猜測,是因為用TextRenderer.MesureText()繪制控件需要一定時間,而程序頻繁對該控件進行重繪,則可能會發生,另一處還未釋放設備上下文時(釋放函數:ReleaseDC()),這一處就再次調用重繪函數的情況,所以導致dc = null。
解決方案:
源代碼中造成異常的語句為:
控件.Visible = false;
至今沒有想到什么根本的解決方法,只是換了個思路:既然是控件重繪導致的問題,則避免控件重新繪制即可:
控件.ReadOnly = false;
功能實現就好啦~haha
學習網址:
https://zhidao.baidu.com/question/264795683.html
設備上下文:https://docs.microsoft.com/zh-cn/cpp/mfc/device-contexts?view=vs-2019
https://www.cnblogs.com/lisuyun/articles/3356696.html