📄 oobject102306.htm
字号:
</font><font face="Comic Sans MS" color="#000000">Class </font><font color="#000000">形式,但是透過
</font><font face="Comic Sans MS" color="#000000">private </font><font color="#000000">與
</font><font face="Comic Sans MS" color="#000000">public </font><font color="#000000">的宣告,一樣具有所謂資訊封裝的效果。</font></p>
<div style="BORDER-RIGHT: 2px solid; PADDING-RIGHT: 4px; BORDER-TOP: 2px solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 1px; BORDER-LEFT: 2px solid; PADDING-TOP: 1px; BORDER-BOTTOM: 2px solid; BACKGROUND-COLOR: #ffccff">
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">procedure
TForm1.Button1Click(Sender: TObject);</font></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">begin</font></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">
TWidgetControl(Sender).Enabled := not
TWidgetControl(Sender).Enabled;</font></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">end;</font></span></p>
</div>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000"> </font></span></p>
<p class="MsoNormal" style="MARGIN: 6pt 0cm 12pt; TEXT-INDENT: 24pt"><font color="#000000">上面的範例是
</font><font face="Comic Sans MS" color="#000000">Delphi </font><font color="#000000">的一個動態連結的範例,我們可以看到參數
</font><font face="Comic Sans MS" color="#000000">Sender </font><font color="#000000">在編輯時期,並未確定它的真正型態,而是到了執行時期,我們才藉由
</font><font face="Comic Sans MS" color="#000000">TWidgetControl </font><font color="#000000">類別取得
</font><font face="Comic Sans MS" color="#000000">Enabled </font><font color="#000000">的屬性值。而這樣的效果在
</font><font face="Comic Sans MS" color="#000000">VB </font><font color="#000000">中,用不定型態,物件變數或者利用
</font><font face="Comic Sans MS" color="#000000">COM </font><font color="#000000">的特性,一樣可以達成。例如我們可以運用物件變數</font><font face="Comic Sans MS" color="#000000">(</font><font color="#000000">如:</font><font face="Comic Sans MS" color="#000000">Object</font><font color="#000000">、
</font><font face="Comic Sans MS" color="#000000">Control)</font><font color="#000000">,來達到這樣的結果:</font></p>
<div style="BORDER-RIGHT: 2px solid; BORDER-TOP: 2px solid; BORDER-LEFT: 2px solid; BORDER-BOTTOM: 2px solid; BACKGROUND-COLOR: #ffccff">
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">Public
Sub EnableControl( Sender as Object)</font></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">
Sender.Enabled = not Sender.Enabled</font></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">End
Sub</font></span></p>
</div>
<p class="MsoNormal" style="MARGIN: 12pt 0cm; TEXT-INDENT: 24pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000"> </font></span><font color="#000000">當然,若要檢查型態,只要運用
</font><font face="Comic Sans MS" color="#000000">Typeof </font><font color="#000000">或
</font><font face="Comic Sans MS" color="#000000">TypeName </font><font color="#000000">來確認型態即可,我們可以對上面的程式做些修改:</font></p>
<div style="BORDER-RIGHT: 2px solid; BORDER-TOP: 2px solid; BORDER-LEFT: 2px solid; BORDER-BOTTOM: 2px solid; BACKGROUND-COLOR: #ffccff">
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">Public
Sub EnableControl( Sender as Object)</font></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="en-us" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">
If TypeName(Sender) = "TWidgetControl" then</font></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">
Sender.Enabled = not Sender.Enabled</font></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="en-us" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">
End If</font></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">End
Sub</font></span></p>
</div>
<p class="MsoNormal" style="MARGIN: 12pt 0cm; TEXT-INDENT: 24pt"><font color="#000000">從上面的推演結果,相信讀者已經認可筆者的假設是可以獲得成立的,也就是說
</font><font face="Comic Sans MS" color="#000000">VB </font><font color="#000000">是支援
</font><font face="Comic Sans MS" color="#000000">OO </font><font color="#000000">的程式語言。嗯!這樣的說法相當弔詭,而且在理論基礎上也有些牽強,不過本文撰寫的目的,不是要賣弄詭辯之術,而是要藉此機會向各位讀者說明,<b>其實物件導向程式設計是一種『設計的方法』、一種『思考模式』而不是一種『定理』</b>。這樣說太模糊了,我們還是範例來說明吧!</font></p>
<p class="MsoNormal" style="MARGIN: 6pt 0cm 12pt; TEXT-INDENT: 24pt"><font color="#000000"><img height="156" hspace="3" src="OOPIsTOM01.jpg" tppabs="http://www.dotspace.idv.tw/sofeeng/2002/image/OOPIsTOM01.jpg" width="288" align="right" vspace="3" border="0">右圖的範例是一個含有三組以三個
</font><font face="Comic Sans MS" color="#000000">Button</font><font color="#000000">作為
</font><font face="Comic Sans MS" color="#000000">Group </font><font color="#000000">的程式,當使用者按下第一個按鈕時,會
</font><font face="Comic Sans MS" color="#000000">Disable </font><font color="#000000">本身,並且
</font><font face="Comic Sans MS" color="#000000">Enable </font><font color="#000000">第二個按鈕,同理其他的按鈕也是如此,這樣的作法,在於讓使用者依次序來按下
</font><font face="Comic Sans MS" color="#000000">Button </font><font color="#000000">而不讓有次序不同的操作出現,而這個範例之中,筆者提供了三種不同的撰寫方式,現在我們來看看它們的程式碼是如何的:</font></p>
<p class="MsoNormal" style="MARGIN: 6pt 0cm 12pt; TEXT-INDENT: 24pt"><font color="#000000">第一種,分別在各自
</font><font color="#000000"><font face="Comic Sans MS">Button </font>的
<font face="Comic Sans MS">OnClick </font>事件撰寫處理的程式碼。</font></p>
<div style="BORDER-RIGHT: 2px solid; PADDING-RIGHT: 4px; BORDER-TOP: 2px solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 1px; BORDER-LEFT: 2px solid; PADDING-TOP: 1px; BORDER-BOTTOM: 2px solid; BACKGROUND-COLOR: #ffccff">
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">procedure
TForm1.Button1Click(Sender: TObject);</font></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">begin</font></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">
Button1.Enabled := False;</font></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">
Button2.Enabled := True;</font></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">
Button3.Enabled := False;</font></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">end;</font></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000"> </font></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">procedure
TForm1.Button2Click(Sender: TObject);</font></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">begin</font></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">
Button1.Enabled := False;</font></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">
Button2.Enabled := False;</font></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">
Button3.Enabled := True;</font></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">end;</font></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000"> </font></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">procedure
TForm1.Button3Click(Sender: TObject);</font></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">begin</font></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">
Button1.Enabled := True;</font></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">
Button2.Enabled := False;</font></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">
Button3.Enabled := False;</font></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">end;</font></span></p>
</div>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 27pt"><span lang="EN-US"><font face="Comic Sans MS" color="#000000"> </font></span></p>
<p class="MsoNormal" style="MARGIN: 6pt 0cm 12pt; TEXT-INDENT: 24pt"><font color="#000000">第二種,在某一個
</font><font face="Comic Sans MS" color="#000000">Button </font><font color="#000000">的
</font><font face="Comic Sans MS" color="#000000">OnClick </font><font color="#000000">事件中撰寫處理程序,然後其他
</font><font face="Comic Sans MS" color="#000000">Button </font><font color="#000000">的
</font><font face="Comic Sans MS" color="#000000">OnClick </font><font color="#000000">事件再指向這個處理程序。</font></p>
<div style="BORDER-RIGHT: 2px solid; PADDING-RIGHT: 4px; BORDER-TOP: 2px solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 1px; BORDER-LEFT: 2px solid; PADDING-TOP: 1px; BORDER-BOTTOM: 2px solid; BACKGROUND-COLOR: #ffccff">
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">
Button4.Enabled := False;</font></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">
Button5.Enabled := False;</font></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">
Button6.Enabled := False;</font></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">
if Sender = Button4 then Button5.Enabled := True;</font></span></p>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -