Visual Basic快捷教程 列舉與結構

2021-07-08 19:24:19 字數 4910 閱讀 3732

本文是《visual basic快捷教程》中的一篇,已經發布的教程包括:

除了visual basic中預設提供的基本資料型別(整型、字串型別等等)之外,還可以自己定義新的資料型別,從而增強程式設計的靈活性。例如,可以定義乙個 student 型別 或者 card 型別等等。通常,這些自定義的資料型別都是以程式語言內建的基本資料型別為依託的。而自定義資料型別的實現手段就是藉由「列舉」和「結構」。

一、列舉(enum)

列舉是visual basic中提供的用於宣告自定義資料型別的一種方法,恰當地使用列舉,不僅可以提高程式本身的可讀性,還可以可以提高程式的可維護性。列舉表示式之可以出現在模組、命名空間或者檔案層次。雖然可以在原始程式檔案或者模組、類或結構內宣告

列舉型別,但不能再程式內宣告。

列舉的資料型別可以自己定義所有的成員(但所有成員必須都屬於同一基本資料型別),其宣告規則如下:

enum [列舉資料型別名稱] as type

[成員1]

[成員2]

... ...

[成員n]

end enum

其中,type可以是byte、integer、long 或 short。如果沒有指定type,則會預設使用integer資料型別。在使用visual basic進行程式設計時,其實會經常用到由列舉型別包裝的資料(只是我們未必會注意到它的本質),例如在使用訊息框時常常會用到的msgboxstyle和msgboxresult(包括vbok、vbcancel、vbabort)等等。

一幅撲克牌會包含有四種花色(不考慮joker),分別是:黑桃(spade)、紅心(heart)、方塊(diamond)和梅花(club)。下面就設計乙個列舉型別來表示這四種花色。在下面的示例程式中,我們用乙個combobox來接收使用者的選擇。使用者選擇的條目將對應0~3之間的乙個數字,程式會根據使用者的選擇展示對應花色的撲克牌。

public class form1

private sub bt_display_click(sender as object, e as eventargs) handles bt_display.click

select case combobox1.selectedindex

case customcard.vbheart

picbox_card.image = pic_h

case customcard.vbspade

picbox_card.image = pic_s

case customcard.vbdiamond

picbox_card.image = pic_d

case customcard.vbclub

picbox_card.image = pic_c

case else

msgbox("請選擇乙個花色!")

end select

end sub

end class

public enum customcard as integer

vbheart = 0

vbspade = 1

vbdiamond = 2

vbclub = 3

end enum

執行上述程式,其結果如下圖所示。當使用者從下拉列表中選擇「梅花」後,使用者介面右側的圖形框中就會顯示一張梅花king的。

二、結構(structure)

在實際程式開發中,我們常常希望把一些零散的資訊整合起來看成乙個整體。例如,關於乙個學生,程式裡需要收集他的姓名、學號、性別和年齡等資訊,其中對於每乙個學生來說,其姓名可以是乙個字串型別的變數,其年齡可以是乙個整型變數... ...可見,這些資訊都是零散的。特別對,如果要面對很多學生的時候,要很好地把每個學生的個人資訊進行有效地管理,那麼像之前那樣對每個學生都定義一組用於描述個人資訊的變數就非常不現實了。這個時候我們會想到把每個學生都看成是乙個整體,他的每項個人資訊都是這個整體的乙個屬性,這樣問題就簡化了許多。把學生看出乙個整體,在程式設計時其實就是要自定義乙個叫做student的新的資料型別。要實現這種功能,就要借助結構(structure)這種語法。

在設計了乙個新的結構(也就是乙個以「結構」形式呈現的自定資料型別)之後,它就相當於是乙個新的資料型別,只不過它是由使用者自己定義的。而在這個結構裡面,可以定義任何需要的屬性,也就相當於student例子中每個學生的個人資訊。在visual basic中,結構的定義規則如下:

structure [結構名稱]

dim [成員1名稱] as [資料型別1]

... ...

dim [成員n名稱] as [資料型別n]

end structure

當定義了一種結構後,宣告這種結構型別之變數就需要用到下面這樣的語法:

dim [變數名稱] as [被宣告的結構名稱]
易見,結構與列舉的主要差異在於:列舉成員的資料都具有相同的型別,而結構的成員資料型別則可以是不同的。結構更適合用於對乙個具有多屬性的整體進行封裝。而列舉則更適合對某型別資料可能取值的集合進行列舉。所以列舉中的各個成員都是具有同等地位的資料,而結構中的各個成員則通常是描述同一事物的不同維度。

眾所周知,計算機領域的最高獎——圖靈機,是由美國計算機協會於2023年設立的乙個用於表彰那些對計算機事業作出重要貢獻之個人的專門獎項。從2023年到2023年的50屆圖靈獎,共計有64名科學家獲此殊榮。下面設計乙個儲存圖靈獎得主資訊的結構,裡面包含該獲獎人的姓名、出生日期以及他主要貢獻的領域等內容。使用者通過互動式操作從下拉列表中選擇某一年份,則程式將自動展示當年度圖靈機得主的一些基本資訊。

public class form1

structure winner

dim name as string

dim field as string

dim birth as date

end structure

dim w1, w2, w3, w4 as winner

private sub form1_load(sender as object, e as eventargs) handles mybase.load

w1.name = "艾倫·佩利"

w1.field = "高階程式設計技巧,編譯器構造"

w1.birth = #4/1/1922#

w2.name = "莫里斯·威爾克斯"

w2.field = "儲存程式式計算機,程式庫"

w2.birth = #6/26/1913#

w3.name = "理查德·漢明"

w3.field = "數值方法,自動編碼系統,錯誤檢測和糾錯碼"

w3.birth = #2/11/1915#

w4.name = "馬文·明斯基"

w4.field = "人工智慧"

w4.birth = #8/9/1927#

end sub

private sub combobox1_selectedindexchanged(sender as object, e as eventargs) handles combobox1.selectedindexchanged

select case combobox1.selectedindex

case 0

txtbox_name.text = w1.name

txtbox_year.text = w1.birth.year

txtbox_month.text = w1.birth.month

txtbox_date.text = w1.birth.day

txtbox_field.text = w1.field

case 1

txtbox_name.text = w2.name

txtbox_year.text = w2.birth.year

txtbox_month.text = w2.birth.month

txtbox_date.text = w2.birth.day

txtbox_field.text = w2.field

case 2

txtbox_name.text = w3.name

txtbox_year.text = w3.birth.year

txtbox_month.text = w3.birth.month

txtbox_date.text = w3.birth.day

txtbox_field.text = w3.field

case 3

txtbox_name.text = w4.name

txtbox_year.text = w4.birth.year

txtbox_month.text = w4.birth.month

txtbox_date.text = w4.birth.day

txtbox_field.text = w4.field

case else

msgbox("請選擇你要查詢的年份!")

end select

end sub

end class

執行上述程式其結果如下圖所示。其中左圖是程式的初始介面,當使用者從下拉列表中選擇乙個獲獎年份後,該年度圖靈機獲得者的一些資訊將被展示出來。

*本文中所使用的visual studio版本已update為2017。

(本文完)

Pandas快捷教程 DataFrame

pandas是python中非常重要的用於處理結構化資料的開源工具包,基於numpy實現了許多靈活 強大的高階工具。pandas提供的很多功能非常類似於excel,這一點大家可以在後續學習中慢慢體會。pandas的主要資料結構是series 一維資料 和dataframe 二維資料 並在此基礎上提供...

mysql安裝教程 快捷安裝

變數名 mysql home 變數值 e mysql 5.7.20 winx64 path裡新增 mysql home bin 以管理員身份執行cmd 進入e mysql 5.7.20 winx64 bin 下 執行命令 mysqld initialize insecure user mysql 在...

Visual Basic 遮蔽編輯控制項

visual basic 遮蔽編輯控制項 確定控制項的輸入遮蔽。語法 form.maskededit.mask string 備註在設計時和執行時均可定義輸入遮蔽。不過,下面是在設計時可能想要使用的標準輸入遮蔽的示例。該控制項可以區分數字和字母字元以進行驗證,但是不能檢查內容是否有效,如月份或一天中...