看上面的錯誤資訊就知道其實在設計器時程式已經執行了拖進窗體的控制項的建構函式和load事件等。看網上好多資料都說是designmode屬性的問題,試了下,感覺不行的。下面新建個使用者控制項,在建構函式裡面處理看看是否是designmode:
生成專案,vs工具箱出現使用者控制項testcontrol
新建乙個窗體,往窗體裡面拖放testcontrol控制項,猜猜結果是true還是false?想當然程式還沒執行,處於設計階段應該是true。
no,結果是false!
明顯是設計階段,應該是true才對,可結果是false!
關於designmode,msdn的解釋是:
網上還有說什麼容器控制項裡面的子控制項designmode為false之類的,試了下,都不靠譜,難道這是乙個坑爹的bug??
解決方法如下:
public其實在設計器階段呼叫的程序是vs的程序----即devenv,上面的方法才是判斷當前控制項是否處於設計模式。static
bool
isdesignmode()
else
if (process.getcurrentprocess().processname == "
devenv")
#endif
return
returnflag;
}
更改後**:
public重新生成後再次在窗體的設計階段拖放testcontrol控制項,這才是預料之中的designmode:partial
class
testcontrol : usercontrol
else}}
執行對比看看:
設計器時設計模式為true,執行時設計模式為false,符合預期結果。
因此,對應這種問題也就引刃而解了,根據錯誤資訊找到對應的地方,往往是建構函式或者load事件裡面進行判斷,若是處於設計模式就不執行指定的一些**就ok。
private上面的 _初始化twain()方法要執行讀取掃瞄器和本地儲存配置檔案等一系列複雜操作,完全不用再設計器階段執行**。void scannercontrol_load(object
sender, eventargs e)
}
重新生成後再次開啟包含該使用者控制項的窗體,在設計階段顯示ok:
ps:自定義使用者控制項時在該控制項所在檔案不要寫其他類,也就是乙個使用者控制項只寫該使用者控制項的類(同樣適合於窗體),否則設計器也無法顯示控制項;再者,推薦用上面寫的isdesignmode()方法取代designmode屬性,並最後不要在自定義控制項或窗體的建構函式中處理設計器無法正常顯示的**,改放在load事件中處理並用isdesignmode()方法過濾。
WinForm窗體介面設計
在設計窗體介面時,如何使容器內控制項與容器邊緣隨著窗體放大或縮小始終保持不變,經過多次除錯,得出以下經驗 例如要使控制項與容器的右邊緣距離始終保持為20,就要對控制項的以下屬性進行設定 1 先對控制項的anchor屬性設定為right,2 再對控制項的margin屬性right設定為20 如果要對控...
Silverlight 設計器錯誤解決辦法
主要針對sl設計器 空指標 錯誤的處理!網上有比較多的方法!但是有些雜亂不堪!基本都試過!方法是對的!但是我後來發現安裝順序應該是這個樣子的!1.先用360強力解除安裝含 silverlight客戶端,silverlight sdk 也叫developer silverlight tools 4 f...
Windows 窗體設計器中的設計時錯誤
在用vs.net進行窗體設計的時候,經常會遇到這樣的問題 我們需要在建構函式或者在onload事件中進行自己的一些初始化操作,比如連線乙個資料庫 呼叫乙個資源檔案或者後期繫結乙個元件。如果 通過編譯,在執行時會執行得相當如你所願。然而,當我們用窗體設計器開啟這樣乙個窗體或者繼承的窗體,ide環境會丟...