2011年9月12日 星期一

#VB 自訂控制項


大致上,要把自訂的控制項基本內容實作設計好

目前是把一些會用到外部資源的事件,或是sub拿掉

等待加入工具,引用參考以後
再從事件中寫入觸發

再來就是要開始規劃一下自己的類別庫

也應該要把自己的class寫得夠嚴謹一些
property 宣告 private 屬性 get ,set
那些適合public,protected,private
要再多磨練多學習

沒想到寫一個自訂MaskTextBox
然後換一個小元件
就花了一整天
類~


VB.NET的Object Oriented编程内功心法。


======================================
應該將相似的控制項
寫在同一個dll之中
宣告成不同class

imports 一次
應該可以拉出不同控制向

可以

@但是要注意的是
當自訂classFather
以及自訂classSon inhirents classFather

Father 與Son含有相同事件
必須將Father 宣告成 Protected Overridable
將 Son 宣告成 Protected Overrides

Son的事件複寫掉Father
否則將會先走 Father 事件,接著走 Son 事件

不管你的事件是不是宣告成 private
=======================================
發現說,自訂控制向
如果有寫入事件
他會先走  form 後端寫入的
才走 dll 寫入的
========================================
因為需求
要查看看怎麼呼叫class中的sub或是function
讓class更方便使用

可以這樣用
但是要注意的是必須宣告成 public
====================================
自訂or擴充 控制項

ControlDesigner 類別

http://msdn.microsoft.com/zh-tw/library/system.windows.forms.design.controldesigner.aspx
(該範例將作用在Design階段,而不是執行階段
在拖拉控制項,設計介面的時候看的到效果)

在建置MSDN範例類別庫的時候 
沒辦法引用 System.Windows.Forms.Design.ControlDesigner

範例的許多.net類別庫需要先引用參考
system.windows.forms
system.Design

大致上該範例就能執行

基本上建置完類別庫
就會產生.dll檔案
到時候就可以引用到工具箱
並且引用參考資源到WinForm專案內
再來就用拖拉的

再來就是內容宣告
要研究怎麼寫





有關於VB.net 開發DLL的問題

建好,工具箱也加入
參考資源也引用

但是卻說元件未定義


不太確定是不是下面的原因

要把 .NET DLL 開放給 COM Client (VB6) 使用,必須要經過 regasm.exe 這個程序,可參考 tihs 大的說明。

純 DLL 是指使用 C 的 export 功能匯出函式符號表 (symbol table) 的 DLL,以 Windows 現有的 User32.DLL,Kernel32.DLL,GDI32.DLL 或是 Advapi32.DLL 這些,若硬體廠商有提供 DLL,也大多是這種類型。純 DLL 必須要由 C/C++ 來開發。

.NET DLL
 和 COM DLL (VB6 可產出的 DLL) 雖然都是用加入參考的方式,但底層大不同。COM DLL 是以 COM 平台為主,而且有實作 IDispose 介面的 DLL,擁有型別函式庫來識別,而 .NET DLL 是以組件的方式存在於 .NET Framework 平台上,COM 和 .NET 可以互通。


一直測不出來
可能是 framework 目標版本問題
但是他現在目標版本怎麼不見了
找不到要到哪邊設定


大概知道是因為目標 FrameWork的關係
元件是 4.0
而專案要引用該元件就必須在4.0的 FrameWork環境


HOW TO:以特定的 .NET Framework 版本或設定檔為目標


=======================================
繼承與事件
http://mogerwu.pixnet.net/blog/post/25997535-%E7%B9%BC%E6%89%BF%E8%88%87%E4%BA%8B%E4%BB%B6


測試過後,發現事件會被繼承
上面一個DoubleClick
在下面的GridView 也可以作用

看怎樣可以捨棄掉該事件

有點怪,private 事件
不知道為什麼也會被繼承到子class內


暫時先兩個分開宣告,各自繼承基底類別
=================================================
因為需要一個編輯模式不太一樣的GridView
(enter 送出編輯以後,自動跳下一個column,而不是預設的下一個 row)

目前透過自己寫的類別
去繼承 DataGridView
然後嵌入Panel 

@要注意的是
宣告的class
事件發生要寫在該宣告class之內

如class呼叫自己本身
要用 me
如果呼叫到class之外的變數
要明確指出是哪個物件的哪個變數或控制項


=============================================================

開發您的第一個 Custom Control - 使用 Visual Studio 2005
http://j2se.myweb.hinet.net/article/dotnet/011/011.htm



[VB6][VBA][VB.net][自製控制項] 再談 Timer 控制項 - 時間解析度過低的解決方法(三)自製「使用者控制項」


沒有留言:

張貼留言