經(jīng)過長時(shí)間學(xué)習(xí)VB.NET條件語句,于是和大家分享一下,看完本文你肯定有不少收獲,希望本文能教會(huì)你更多東西。在程序設(shè)計(jì)中,VB.NET條件語句能夠根據(jù)表達(dá)式的值來決定代碼的執(zhí)行流程。在VB.NET中,條件分支語句有兩種:If/Then/Else語句和Select/Case語句。
成都創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站制作、成都做網(wǎng)站、外貿(mào)營銷網(wǎng)站建設(shè)與策劃設(shè)計(jì),江口網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)10余年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:江口等地區(qū)。江口做網(wǎng)站價(jià)格咨詢:13518219792
1. If/Then/Else語句
If/Then/Else語句是最常用的VB.NET條件語句。它的基本形式是:
If condition Then statements1 [Else statements2 ]
它表示:如果condition為True,那么就執(zhí)行statements1;否則執(zhí)行statements2。根據(jù)時(shí)間顯示問候信息。
%
If Hour(Now)12 Then Response.Write ("Good morning! Cindy!")
If Hour(Now)=12 Then Response.Write ("Good noon! Cindy!")
If (Hour(Now)12 And Hour(Now)18) Then Response.Write ("Good afternoon! Cindy!")
If Hour(Now)=18 Then Response.Write ("Good evening! Cindy!")
%
在上面的例子中,函數(shù)Hour()是對(duì)給出的日期時(shí)間求它的小時(shí)數(shù),Now函數(shù)用于返回當(dāng)前的日期和時(shí)間。程序根據(jù)當(dāng)時(shí)的時(shí)間判定是上午、中午還是下午,分別給出問候信息。我們看到,這個(gè)寫法很簡(jiǎn)單,但是這個(gè)程序?yàn)榱孙@示一條問候信息,要對(duì)Hour(Now)取值4次并且執(zhí)行4次比較才能完成,從效率上考慮并不好。If/Then/Else語句還可以寫成比較復(fù)雜的形式:
If condition_1 Then
statements_1
[ElseIf condition_m Then statements_m
[ElseIf condition_n Then…]]
[Else statements_2]
End If
這個(gè)語句可以檢測(cè)多個(gè)條件。第一種寫法要求語句在寫的時(shí)候要在一行中寫完,例如例2.4 的第2行的If語句。這條語句也可以采用第二種方法來寫,方法如下:
If Hour(Now)12 Then
Response.Write ("Good Morning!Cindy!")
End If
建議用戶采用后一種寫法,因?yàn)檫@種方法更結(jié)構(gòu)化,可讀性好。當(dāng)用戶在調(diào)試大型軟件的代碼時(shí),會(huì)發(fā)現(xiàn),雖然看起來多寫了幾行語句,但好處卻是很大的。根據(jù)時(shí)間顯示問候信息。請(qǐng)注意這個(gè)例子的寫法與上個(gè)例子中的寫法在執(zhí)行效率上的區(qū)別。
%
If Hour(Now)12 Then
Response.Write ("Good morning! Cindy!")
ElseIf Hour(Now)=12 Then
Response.Write ("Good noon! Cindy!")
ElseIf Hour(Now)=18 Then
Response.Write ("Good evening! Cindy!")
Else
Response.Write ("Good afternoon! Cindy!")
End If
%
上面的例子在執(zhí)行的過程中,對(duì)于當(dāng)前不同的時(shí)間,為了顯示問候信息,執(zhí)行的Hour(Now)的取值和比較的次數(shù)是不一樣的:最少只要1次,最多需要3次。
2. Select/Case結(jié)構(gòu)
當(dāng)程序中的條件比較復(fù)雜,而且是根據(jù)同一個(gè)表達(dá)式的不同值執(zhí)行不同操作的時(shí)候,用If/Then/Else語句來寫就顯得十分煩瑣。這時(shí)可以考慮采用Select/Case結(jié)構(gòu)來完成VB.NET條件語句。
Select/Case結(jié)構(gòu)為:
Select Case testexpression
Case condition_1
statements_1
[… Case Else statements_n]
End Select
它表示:如果testexpression的值是Condition_1,就執(zhí)行statements_1,以此類推,如果都不符合,就執(zhí)行Statements_n。用Select/Case語句來實(shí)現(xiàn)問候信息的顯示。
%
Select Case Hour(Now)
Case 0,1,2,3,4,5,6,7,8,9,10,11
Response.Write ("Good morning! Cindy!")
Case 12
Response.Write ("Good noon! Cindy!")
Case 13,14,15,16,17
Response.Write ("Good afternoon! Cindy!")
Case Else
Response.Write ("Good evening! Cindy!")
End Select
%
很明顯,用這種方法來顯示問候信息要比用If/Then/Else語句清楚得多。因此,在選擇VB.NET條件語句的時(shí)候要考慮好采用什么方式,并認(rèn)真設(shè)置好條件。
1、vb.net ?完全符合面向?qū)ο蟮木幊陶Z言抽象、封裝、繼承的四大特性,而vb不支持繼承。
2、錯(cuò)誤處理不同。
vb中只是On Error.....goto和On Errer Resume Next ,這些錯(cuò)誤稱為非結(jié)構(gòu)化異常處理。而在vb.net中采用的結(jié)構(gòu)化異常處理機(jī)制,try...catch....finally控制。
3、兩者產(chǎn)生的窗體不同。
vb.net 允許創(chuàng)建不同類型的應(yīng)用程序,例如,創(chuàng)建ASP.NET和ASP.NET Web 服務(wù)應(yīng)用程序,還允許創(chuàng)建控制臺(tái)應(yīng)用程序和作為桌面服務(wù)運(yùn)行的應(yīng)用程序。但是vb 只能創(chuàng)建Windows窗體。
4、數(shù)據(jù)庫訪問的差別。
vb6.0是通過ADO(Active X Data Objext)來實(shí)現(xiàn)對(duì)數(shù)據(jù)庫訪問。而vb.net 是通過ADO.NET來訪問數(shù)據(jù)庫。
擴(kuò)展資料
Visual Basic(簡(jiǎn)稱VB)是Microsoft公司開發(fā)的一種通用的基于對(duì)象的程序設(shè)計(jì)語言,為結(jié)構(gòu)化的、模塊化的、面向?qū)ο蟮?、包含協(xié)助開發(fā)環(huán)境的事件驅(qū)動(dòng)為機(jī)制的可視化程序設(shè)計(jì)語言。是一種可用于微軟自家產(chǎn)品開發(fā)的語言。
“Visual” 指的是開發(fā)圖形用戶界面 (GUI) 的方法——不需編寫大量代碼去描述界面元素的外觀和位置,而只要把預(yù)先建立的對(duì)象add到屏幕上的一點(diǎn)即可。
“Basic”指的是 BASIC (Beginners All-Purpose Symbolic Instruction Code) 語言,是一種在計(jì)算技術(shù)發(fā)展歷史上應(yīng)用得最為廣泛的語言。
Visual Basic源自于BASIC編程語言。VB擁有圖形用戶界面(GUI)和快速應(yīng)用程序開發(fā)(RAD)系統(tǒng),可以輕易的使用DAO、RDO、ADO連接數(shù)據(jù)庫,或者輕松的創(chuàng)建Active?X控件,用于高效生成類型安全和面向?qū)ο蟮膽?yīng)用程序 。
參考資料:百度百科-Visual Basic
1.一般來說,要實(shí)現(xiàn)前后端分離,前端就需要開啟一個(gè)本地的服務(wù)器來運(yùn)行自己的前端代碼,以此來模擬真實(shí)的線上環(huán)境,并且,也是為了更好的開發(fā)。因?yàn)槟阍趯?shí)際開發(fā)中,你不可能要求每一個(gè)前端都去搭建一個(gè)java(php)環(huán)境,并且在java環(huán)境下開發(fā),這對(duì)于前端來說,學(xué)習(xí)成本太高了。
?2.但如果本地沒有開啟服務(wù)器的話,不僅無法模擬線上的環(huán)境,而且還面臨到了跨域的問題,因?yàn)槟闳绻麑戩o態(tài)的html頁面,直接在文件目錄下打開的話,你是無法發(fā)出ajax請(qǐng)求的(瀏覽器跨域的限制),因此,你需要在本地運(yùn)行一個(gè)服務(wù)器,可是又不想搭建陌生而龐大的java環(huán)境,怎么辦法呢?nodejs正好解決了這個(gè)問題。在我們項(xiàng)目中,我們利用nodejs的express框架來開啟一個(gè)本地的服務(wù)器,然后利用nodejs的一個(gè)http-proxy-middleware插件將客戶端發(fā)往nodejs的請(qǐng)求轉(zhuǎn)發(fā)給真正的服務(wù)器,讓nodejs作為一個(gè)中間層。這樣,前端就可以無憂無慮的開發(fā)了
?3.由于前后端分離后,前端和后臺(tái)同時(shí)開發(fā)時(shí),就可能遇到前端已經(jīng)開發(fā)好一個(gè)頁面了,可是卻等待后臺(tái)API接口的情況。比如說A是負(fù)責(zé)前端,B是負(fù)責(zé)后臺(tái),A可能用了一周做好了基本的結(jié)構(gòu),并且需要API接口聯(lián)調(diào)后,才能繼續(xù)開發(fā),
?4.而此時(shí)B卻還沒有實(shí)現(xiàn)好所需要的接口,這種情況,怎么辦呢?在我們這個(gè)項(xiàng)目里,我們是通過了mock來提供一些假數(shù)據(jù),我們先規(guī)定好了API接口,設(shè)計(jì)出了一套API文檔,然后我們就可以通過API文檔,利用mock來返回一些假數(shù)據(jù),這樣就可以模擬發(fā)送API到接受響應(yīng)的整一個(gè)過程,
?5.因此前端也不需要依賴于后端開發(fā)了,可以獨(dú)立開發(fā),等到后臺(tái)的API全部設(shè)計(jì)完之后,就可以比較快速的聯(lián)調(diào)。
Nodes 集合包含分配給 TreeView 控件的所有 TreeNode 對(duì)象。此集合中的樹節(jié)點(diǎn)稱作根樹節(jié)點(diǎn)。隨后添加到根樹節(jié)點(diǎn)上的任何樹節(jié)點(diǎn)稱作子節(jié)點(diǎn)。由于每個(gè) TreeNode 都可以包含其他 TreeNode 對(duì)象的集合,您可能會(huì)在循環(huán)訪問集合時(shí)覺得很難確定自己在樹結(jié)構(gòu)中的位置。您可以使用 PathSeparator 字符串值來分析 TreeNode.FullPath 字符串,以確定 TreeNode 標(biāo)簽的起始和終止位置。
可以在樹節(jié)點(diǎn)旁顯示圖像,方法是將一個(gè) ImageList 分配給 ImageList 屬性,然后通過引用 Image 在 ImageList 中的索引值來分配該 Image。使用下面的屬性分配圖像:
將 ImageIndex 屬性設(shè)置為當(dāng)樹節(jié)點(diǎn)未選定時(shí)所顯示的 Image 的索引值。
將 SelectedImageIndex 屬性設(shè)置為當(dāng)樹節(jié)點(diǎn)被選定時(shí)要顯示的 Image 的索引值。
ImageIndex 和 SelectedImageIndex 屬性值所引用的圖像是所有分配給 Nodes 集合的樹節(jié)點(diǎn)顯示的默認(rèn)圖像。每個(gè)樹節(jié)點(diǎn)都可以通過設(shè)置 TreeNode.ImageIndex 和 TreeNode.SelectedImageIndex 屬性來取代默認(rèn)的圖像。
樹節(jié)點(diǎn)可以展開,以顯示下一級(jí)子樹節(jié)點(diǎn)。用戶可以在 TreeNode 旁顯示加號(hào) (+) 按鈕時(shí)通過單擊加號(hào) (+) 按鈕來展開 TreeNode,或者可以通過調(diào)用 TreeNode.Expand 方法來展開 TreeNode。若要展開 Nodes 集合中的所有子樹節(jié)點(diǎn)級(jí)別,請(qǐng)調(diào)用 ExpandAll 方法。若要折疊子 TreeNode 級(jí)別,可以調(diào)用 TreeNode.Collapse 方法,也可以在 TreeNode 旁顯示減號(hào) (-) 按鈕時(shí)按減號(hào) (-) 按鈕。還可以通過調(diào)用 TreeNode.Toggle 方法在展開和折疊狀態(tài)之間切換。
樹節(jié)點(diǎn)可以選擇性地顯示復(fù)選框。若要顯示復(fù)選框,請(qǐng)將 TreeView 的 CheckBoxes 屬性設(shè)置為 true。對(duì)于處于選中狀態(tài)的樹節(jié)點(diǎn),Checked 屬性設(shè)置為 true。
注意
從 BeforeCheck 或 AfterCheck 事件內(nèi)設(shè)置 TreeNode.Checked 屬性將導(dǎo)致該事件被多次引發(fā)并可能產(chǎn)生意外行為。例如,您可以在遞歸更新子節(jié)點(diǎn)時(shí)在事件處理程序中設(shè)置 Checked 屬性,以便用戶不必逐個(gè)展開并選中每個(gè)節(jié)點(diǎn)。如果未將 TreeViewEventArgs 的 Action 屬性設(shè)置為 TreeViewAction.Unknown,則若要防止該事件被多次引發(fā),需為僅執(zhí)行遞歸代碼的事件處理程序添加邏輯。有關(guān)如何進(jìn)行此操作的示例,請(qǐng)參見 AfterCheck 或 BeforeCheck 事件的示例部分。
通過設(shè)置 TreeView 控件的一些顯示和樣式屬性,可以更改此控件的外觀。如果將 ShowPlusMinus 設(shè)置為 true,則會(huì)分別在每個(gè)可展開或折疊的 TreeNode 旁顯示加號(hào)或減號(hào)按鈕。如果將 ShowRootLines 屬性設(shè)置為 true,TreeView 則會(huì)顯示聯(lián)接所有根樹節(jié)點(diǎn)之間的連線。通過將 ShowLines 屬性設(shè)置為 true,可以顯示子樹節(jié)點(diǎn)與其根節(jié)點(diǎn)之間的連線。如果將 HotTracking 屬性設(shè)置為 true,那么當(dāng)鼠標(biāo)指針移過樹節(jié)點(diǎn)標(biāo)簽時(shí),樹節(jié)點(diǎn)標(biāo)簽的外觀將發(fā)生變化。如果啟用熱跟蹤,樹節(jié)點(diǎn)標(biāo)簽將具有超鏈接的外觀。也可以完全自定義 TreeView 控件的外觀。若要執(zhí)行此操作,請(qǐng)將 DrawMode 屬性設(shè)置為 TreeViewDrawMode.Normal 以外的值并處理 DrawNode 事件。
注意
在運(yùn)行時(shí)設(shè)置 CheckBoxes、Scrollable、ImageIndex 和 SelectedImageIndex 屬性時(shí),將重新創(chuàng)建 TreeView 句柄(請(qǐng)參見 Control.RecreateHandle)以更新控件的外觀。這將折疊除選定的 TreeNode 之外的所有樹節(jié)點(diǎn)。
下面的代碼示例闡釋了如何使用 TreeView 控件。
Private Sub InitializeTreeView()
treeView1.BeginUpdate()
treeView1.Nodes.Add("Parent")
treeView1.Nodes(0).Nodes.Add("Child 1")
treeView1.Nodes(0).Nodes.Add("Child 2")
treeView1.Nodes(0).Nodes(1).Nodes.Add("Grandchild")
treeView1.Nodes(0).Nodes(1).Nodes(0).Nodes.Add("Great Grandchild")
treeView1.EndUpdate()
End Sub
From MSDN
Structure是值類型,classe是引用類型 Structure用棧來分配; classe用堆來分配 structure的成員默認(rèn)情況下是公共的,而Class的成員變量和常量默認(rèn)情況下是私有的而其它成員默認(rèn)情況下是公共的.這與VB6是相兼容的。 structure必須至少有一個(gè)非共享的成員變量或事件成員,class可以完全是空的. Structure的成員不能聲明成Protected; class成員可以. 一個(gè)structure過程只能在它是一個(gè)Shared Sub時(shí)才能handle events而且只能通過AddHandler語句;而任何class過程都可以handle events,既可以用Handles關(guān)鍵字或 AddHandler語句。 Structure variable declarations cannot specify initializers, the New keyword, or initial sizes for arrays; class variable declarations can. Structure繼承自ValueType類,不能從其它任何類型繼承; classes可以從任何不是ValueType的類繼承 Structure不能繼承而Class可以 Structure從來不析構(gòu)terminated因此common language runtime (CLR)從來不調(diào)用它的Finalize方法,classe由垃圾回收器進(jìn)行析構(gòu), 當(dāng)沒有任何對(duì)該類的引用時(shí)調(diào)用它的Finalize方法 structure 不需要一個(gè)構(gòu)造函數(shù),而Class需要 Structure只能有帶參數(shù)的非共享的構(gòu)造函數(shù); classes 可以有帶或不帶參數(shù)的構(gòu)造函數(shù). 每個(gè)Structure都有一個(gè)默認(rèn)的不帶參數(shù)的構(gòu)造函數(shù)以對(duì)其成員進(jìn)行初始化,你可以重新定義該函數(shù)