VB學習心得之ActiveX控制項B

2021-10-17 12:18:21 字數 2912 閱讀 8200

控制項與容器:控制項總是在一定的容器上存在的,所以控制項的屬性與事件在使用者手裡不總是製作者所提供的所有屬性與事件,除製作者提供的所有屬性與事件外,它包括它所在的容器提供的的擴充套件屬性與事件,一般來說,不同的容器提供的擴充套件屬性與事件是不同的,同一控制項在不同的容器中某些特性能實現而有些則無法實現,但通常都有幾個標準的擴充套件屬性(name\visible\parnet\cancel\default),事件(dragdrop\dragover\getfocus\lostfocus\validate)。使用者可以通過擴充套件物件來訪問它的擴充套件屬性。

關於焦點:與焦點控制項有關的乙個屬性是cangetfocus(boolean),當它被設為true時(預設),它可以得到焦點,它的上面可以放置一些能接受焦點的控制項,反之,如果這個屬性被設定為假,那麼它的上面就不能放能接受焦點的控制項。也就是說,它內部子控制項接受焦點的前提是它本身能接受焦點,但實際上當子控制項接受焦點時,它本身不會接受焦點(可我們從大的方面看,它的子控制項接受焦點也就是它接受了焦點),這個屬性將會影響它的容器提供給的三個事件是否存在(getfocus\lostfocus\validate),要注意區分控制項內部的焦點事件與外部的焦點事件,它外部的是由容器提供的(只要cangetfocus被設定為真),而內部的是它自己本身具有的與屬性cangetfocus無關。

它內部的焦點事件有四個:enterfocus\gotfocus\lostfocus\exitfocus.這個四個事件的發生情況是:

當無子控制項(確切的說是無能接受焦點的子控制項)時,它都發生,當有子控制項時,不會發生got\lost。當在兩上控制項之間傳遞焦點時,總是在前乙個失去焦點前,先發生要接受焦點的enter事件,為了好理解我們可以把事件分三組:enter——接受焦點前的準備工作,got——發生接受焦點的動作,lost\exit——失去焦點前的準備工作,除此之外還要明白乙個事實:

在乙個控制項移交焦點時,先要讓接受焦點的那個控做好準備,所以在發生乙個控制項的enter或lost\enter前會發生另乙個控制項的enter事件。在進行資料驗證時,最後乙個子控制項不會在lost前不會發生validate。

內外焦點事件的關係:如果控制項不發生got\lost,那麼它外部的got\validate\lost就取代內部的相應事件,got在enter之後,validate在最後乙個子控發生lost之前,lost在內部的exit之後。外部的lost總是發生在所有內部和外焦點事件的最後,而內部的enter總是發生在上乙個控制項的lost\exit之前和上個控的驗證事件validate之後。

而validate(只有外部才有)總是發生在控制項的lost之前,內部和外部的got同時存在時,先發生外部的,在發生內部的(可以認為這個

過程如同一根針穿過物體——由外到內,在由內到外)。

關於設定乙個容器控制項:要把乙個控制項設計為乙個容器控制項的方法是把它的屬性controlcontainer設定為真,這樣這個控制項就有乙個containedcontrols集合,它包含了所有放在它上面的其它控制項的引用,要注意與controls集合區分。要訪問containedcontrols集合,就必須在控制項定位之後,即readproperties事件之後。

(關於enabled事件:幫助中講到「這個屬性比較古怪,它是擴充套件屬性,但是擴充套件物件並沒有提供該屬性,除非控制項有自己的enabled屬性,並且帶有正確的過程id。如果擴充套件沒有enabled屬性,則控制項就不會象其它控制項那樣顯示出啟用/禁用效果」,但在我的實際操作中發現雖然擴充套件物件沒有提供這個屬性,但這種沒有提供僅僅是表面的,也就是說雖在屬性視窗中看不到,但在**可以用,比如我在把控制項的enabled屬性委派給usercontrol物件時,。

而且後面它還說「要給這個屬性定義乙個過程id,才能生效——始控制項的這個屬性與它的容器(窗體)一致,這個id就是把過程識別符號設定為enabled,這樣當窗體的這個屬性為假時,控制項相應地變為假,如果不設定這個過程id,就不能使之一致」。但在實際過程中,我發現雖然表面上設定後在**上會使之保持一致,但實際操作中,效果是一樣的——也就是說無論設定不設定這個id,只要窗體的這個屬性設定為假,那麼它上面的控制項就不能響應使用者事件。而這個唯一的庥煩是,當在屬性視窗中設定好這個屬性後,執行時不起作用——也就是說在設計時設定好的值並不能儲存在它的窗體檔案中,當執行時,它保持不變。

重要的發現:無論在寫入和讀取屬性事件中是否加入和此屬性有關的**都不能把它寫入所在窗體檔案中。)——這是乙個難點:

<。

關於透明的背景:可將usercontrol物件的backstyle設定為transparent,那麼控制項的後面的物件就成為可見的,後面的其它控制項就通過本控制項的子控制項的間隙顯露出來。另外可通過maskpicture和maskcolor設定一種遮蔽效果,就是把maskpicture中的點陣圖中的與maskcolor的值一樣的地方設定成透明的。

透明的部分由它下面的容器接受事件。

在工具箱中的圖示用乙個屬性來設定:toolboxbitmap(16×15)

關於輕量控制項:輕量控制項有時也被稱為「無視窗的控制項」,它與常規的控制項有一點顯著的區別:它們不具有視窗控制代碼(hwnd 屬性)。

因此它們使用的系統資源相對而言要少一些,對於 internet 應用程式、分布式應用程式,以及其他容易受系統資源制約的應用程式來

說,這種性質是很有吸引力的。常見的輕量控制項包括 label 控制項和 image 控制項。要建立乙個輕量的使用者控制項,只需在設計時將 windowless 屬性設定為 true。

輕量的使用者控制項只能夠用來容納其他的輕量控制項:如果您試圖將乙個有視窗的控制項放入乙個輕量的使用者控制項,那麼將會發生乙個設計時錯誤。同樣,如果乙個使用者控制項中已經容納了有視窗的控制項,試圖將其 windowless 屬性設定為 true 將會導致同樣的錯誤。

並非所有的容器都支援輕量控制項。如果輕量使用者控制項的宿主並不支援輕量方式,那麼它將自動地以視窗模式執行。系統將在執行時賦予它乙個 hwnd。

目前已知的支援輕量控制項的宿主包括: visual basic 4.0 及其後續版本,internet explorer 4.

0 及其後續版本,以及 visual basic for applications。這也是乙個難點:<——關於hittest事件和幾個控制區域。

VB學習心得體會

我對vb的興趣從何而來呢?從我對電腦的喜愛說起。我參加過乙個學校的計算機 培訓班,之後在沒事的時候自己還設計個 photoshop什麼的。大學加入廣播站的網路技術部之後也學習了不少關於au,ae,方面的製作。學習vb,我覺得能加深我對計算機已有認識的理解,能促進我對計算機的喜愛熱情的提高,同時又能增...

案件防控學習心得

案件的發生,無論是對國家和社會,還是對單位和個人都有很大的危害性 一是給國家和社會造成了巨大的損失。無論哪個案件的發生,最直接受到損害的就是國家和社會,國家蒙受了直接的經濟損失,而案件的發生,引發社會對銀行的不信任感,造成了嚴重的後果。二是給單位業務開展帶來嚴重後果,案件的發生,使客戶懷疑我們誠信經...

案件防控學習心得

2011年信用社多次組織全體員工認真學習銀監有關案件防控的檔案精神,結合聯社下發的典型案例的通報,積極開展了討論與學習,參照制度認真查詢問題,深入挖掘殘留在自身的陳規陋習。通過近段時間的學習教育,本人對案件專項治理工作重要性和必要性有了更深的認識,現將本年度對案件防控學習的體會通報如下。近年來,各種...