VB.NET學習筆記:WinForm如何正確呼叫自定義控制元件
阿新 • • 發佈:2019-01-04
測試環境:windows 7和Microsoft Visual Studio 2015
點選下載本文資源
在《VB.NET學習筆記:WinForm自定義DataGridView分頁組合控制元件》博文中,呼叫分頁控制元件的窗體與分頁控制元件同在一個專案裡。筆者從《一種正確呼叫自定義控制元件的方法》博文中查詢得知,這種呼叫自定義控制元件的方法在專案除錯或生成時可能會出現如圖所示的錯誤。
出錯的原因可能是:除錯或生成專案時,你無法確定自定義控制元件和窗體的生成順序,若先生成窗體,再生成自定義控制元件,生成窗體時,窗體中所引用的自定義控制元件還未生成,因此造成錯誤。
為防止出錯,必須確保自定義控制元件生成順序先於呼叫自定義控制元件的窗體。所以應該把自定義控制元件與窗體分隔為兩個專案,其中自定義控制元件所在的專案不再是生成一個應用程式,而是生成類庫供其它專案呼叫。
操作步驟如下:
一、新建一個Windows窗體應用程式專案。
然後儲存專案,記得勾選“建立解決方案的目錄”。
在解決方案資源管理器視窗中右鍵單擊“解決方案"WinPager"”,新增現有專案。
找到分頁控制元件原始檔所在的資料夾,新增字尾名為.vbproj的專案檔案DataGridViewPage.vbproj。
疑難技巧:如果解決方案資源管理器視窗中沒有顯示上面圖中的解決方案的話,可單擊選單欄“工具”——“選項”,在彈出的“選項”視窗中左側選擇“專案和解決方案”,然後在右側勾選“總是顯示解決方案”選項,最後點“確定”。如下2圖所示。
二、相關設定
1、設定DataGridViewPage專案屬性:右鍵單擊DataGridViewPage專案名,右鍵選單裡選“屬性”,然後設定 “應用程式型別”為“類庫”,“啟動物件”設定為“無”,因要生成DLL檔案,所以該專案下的“Form1.vb”窗體可以刪除。
然後“重新生成”DataGridViewPage專案,會在專案目錄下bin資料夾裡子資料夾Debug中生成一個dll檔案。操作如下圖所示。
2、新增引用:雖然把DataGridViewPage專案和WinPager專案放到了同一個解決方案裡,但他們之間依然沒有必然關係,專案WinPager必須引用DataGridViewPage專案裡生成的dll檔案才能建立相互關係。
操作如下圖所示:右鍵單擊專案WinPager名稱,彈出的右鍵選單裡點“新增”——“引用”
在彈出的“引用管理器”中點“瀏覽”,然後在彈出的“選擇要引用的檔案”窗口裡選擇到DataGridViewPage專案目錄下bin資料夾裡子資料夾Debug中的DataGridViewPage.dll檔案,點新增,再點確定,OK了。如下圖所示操作。
引用成功後就可以在“解決方案資源管理器”中看到WinPager專案中的引用裡多了個引用DataGridViewPage。如下圖所示。
3、設定依賴項:為確保自定義控制元件生成順序先於呼叫自定義控制元件的窗體,可以為解決方案設定依賴項。
如下圖操作:右鍵單擊“解決方案”名稱,彈出的選單裡點“專案依賴項”。
在彈出的“專案依賴項”窗口裡,“專案”選擇“WinPager”,“依賴於”勾選“DataGridViewPage”,然後點確定。如下圖所示。
在“專案依賴項”中點選“生成順序”,即可看到分頁控制元件“DataGridViewPage”專案生成先於“WinPager”專案。如下圖所示:
4、設定啟動專案:右鍵單擊解決方案名稱,彈出的右鍵選單裡點“屬性”。如下圖。
在彈出的“解決方案屬性頁”視窗中,點選“單啟動專案”並選擇WinPager專案為啟動專案。如下圖。
此時開啟WinPager專案中的Form1窗體,在工具箱中會發現DataGridViewPage專案中的DataGridViewPaging控制元件,如下圖所示。如果沒有看到則需要生成一下專案。
如果工具箱中還是沒有看到DataGridViewPaging控制元件,你可以按以下方法新增自定義控制元件到工具箱中。
在“工具箱”視窗中任意位置右鍵單擊,在彈出的右鍵選單裡點“選擇項”。如下圖。
在彈出的“選擇工具箱項”視窗中,點“.NET Framework元件”——“瀏覽”。
在“開啟”視窗中選擇到DataGridViewPage專案目錄下bin資料夾裡子資料夾Debug中的DataGridViewPage.dll檔案,點“開啟”即可,如下圖。現在應該在工具箱中可以看到我們自定義的控制元件DataGridViewPaging控制元件了。
此刻,Winform呼叫自定義控制元件的環境已然搭配完成,你可以在DataGridViewPage專案直接修改自定義控制元件,修改結果可直接反映到呼叫的WinPager專案中。為方便管理,建議把同一解決方案中的全部專案放在同一資料夾中。