凡需要在整個工程范圍內(nèi)使用的變量、過程、類型和API函數(shù)聲明都可放在標準模塊中使用。
創(chuàng)新互聯(lián)專注于含山企業(yè)網(wǎng)站建設,響應式網(wǎng)站建設,商城系統(tǒng)網(wǎng)站開發(fā)。含山網(wǎng)站建設公司,為含山等地區(qū)提供建站服務。全流程按需求定制制作,專業(yè)設計,全程項目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務
1.標準模塊,只包含過程、類型以及數(shù)據(jù)的聲明和定義的模塊。在標準模塊中,模塊級別聲明和定義都被默認為?Public。在?Visual?Basic?的早期版本中將標準模塊看作代碼模塊。是將那些與特定窗體或控件無關的代碼(文件擴展名為?.BAS?)中。
標準模塊中可以包含變量、常數(shù)、類型、外部過程和全局過程的全局(在整個應用程序范圍內(nèi)有效的)聲明或模塊級聲明。
2.一個過程可能用來響應幾個不同對象中的事件,應該將這個過程放在標準模塊中,而不應在每一個對象的事件過程中重復相同的代碼。
3.在數(shù)據(jù)存儲方式上,標準模塊的數(shù)據(jù)不可能多于一份。這意味著若程序中某個部分改動了標準模塊的公共變量,隨后程序的其它部分讀取該變量會得到該值。
4.標準模塊中的數(shù)據(jù)在程序作用域內(nèi)存在,也就是說,它存在于程序的存活期中。
5.當變量在標準模塊中聲明為?Public?時,則它在工程中任何地方都是可見的。
標準模塊代碼實例,其中聲明了API函數(shù)和對象類型及將位圖轉換為JPG格式的過程,供整個應用程序的存活期中使用圖形格式轉換用。
Option?Explicit
Public?Declare?Function?GdiplusStartup?Lib?"GDIPlus"?(token?As?Long,?inputbuf?As?GdiplusStartupInput,?ByVal?outputbuf?As?Long)?As?Long
Public?Declare?Function?GdiplusShutdown?Lib?"GDIPlus"?(ByVal?token?As?Long)?As?Long
Public?Declare?Function?GdipCreateBitmapFromHBITMAP?Lib?"GDIPlus"?(ByVal?hbm?As?Long,?ByVal?hpal?As?Long,?Bitmap?As?Long)?As?Long
Public?Declare?Function?GdipDisposeImage?Lib?"GDIPlus"?(ByVal?Image?As?Long)?As?Long
Public?Declare?Function?GdipSaveImageToFile?Lib?"GDIPlus"?(ByVal?Image?As?Long,?ByVal?fileName?As?Long,?clsidEncoder?As?GUID,?encoderParams?As?Any)?As?Long
Public?Declare?Function?CLSIDFromString?Lib?"ole32"?(ByVal?str?As?Long,?id?As?GUID)?As?Long
Public?Declare?Function?GdipCreateBitmapFromFile?Lib?"GDIPlus"?(ByVal?fileName?As?Long,?Bitmap?As?Long)?As?Long
Public?Type?GUID
Data1?As?Long
Data2?As?Integer
Data3?As?Integer
Data4(0?To?7)?As?Byte
End?Type
Public?Type?GdiplusStartupInput
GdiplusVersion?As?Long
DebugEventCallback?As?Long
SuppressBackgroundThread?As?Long
SuppressExternalCodecs?As?Long
End?Type
Public?Type?EncoderParameter
GUID?As?GUID
NumberOfValues?As?Long
type?As?Long
Value?As?Long
End?Type
Public?Type?EncoderParameters
Count?As?Long
Parameter?As?EncoderParameter
End?Type
Public?Function?PictureBoxSaveJPG(ByVal?pict?As?StdPicture,?ByVal?fileName?As?String,?Optional?ByVal?quality?As?Byte?=?80)?As?Boolean
Dim?tSI?As?GdiplusStartupInput
Dim?lRes?As?Long
Dim?lGDIP?As?Long
Dim?lBitmap?As?Long
'初始化?GDI+
tSI.GdiplusVersion?=?1
lRes?=?GdiplusStartup(lGDIP,?tSI,?0)
If?lRes?=?0?Then
'從句柄創(chuàng)建?GDI+?圖像
lRes?=?GdipCreateBitmapFromHBITMAP(pict.Handle,?0,?lBitmap)
If?lRes?=?0?Then
Dim?tJpgEncoder?As?GUID
Dim?tParams?As?EncoderParameters
'初始化解碼器的GUID標識
CLSIDFromString?StrPtr("{557CF401-1A04-11D3-9A73-0000F81EF32E}"),?tJpgEncoder
'設置解碼器參數(shù)
tParams.Count?=?1
With?tParams.Parameter?'?Quality
'得到Quality參數(shù)的GUID標識
CLSIDFromString?StrPtr("{1D5BE4B5-FA4A-452D-9CDD-5DB35105E7EB}"),?.GUID
.NumberOfValues?=?1
.type?=?4
.Value?=?VarPtr(quality)
End?With
'保存圖像
lRes?=?GdipSaveImageToFile(lBitmap,?StrPtr(fileName),?tJpgEncoder,?tParams)
'銷毀GDI+圖像
GdipDisposeImage?lBitmap
End?If
'銷毀?GDI+
GdiplusShutdown?lGDIP
End?If
If?lRes?Then
PictureBoxSaveJPG?=?False
Else
PictureBoxSaveJPG?=?True
End?If
End?Function
調(diào)用標準模塊中轉換圖片格式PictureBoxSaveJPG過程的某窗體按鈕事件代碼實例代碼:
Private?Sub?Command3_Click()
'?設置“CancelError”為?True
CommonDialog1.CancelError?=?True
On?Error?GoTo?ErrHandler
'?設置標志
CommonDialog1.Flags?=?cdlOFNHideReadOnly
'?設置過濾器
CommonDialog1.Filter?=?"JPEG?Files"??"(*.jpg)|*.jpg"
'?指定缺省的過濾器
CommonDialog1.FilterIndex?=?2
'?顯示“打開”對話框
CommonDialog1.ShowSave
'?顯示選定文件的名字
'MsgBox?CommonDialog1.fileName
Set?Picture2.Picture?=?Picture1.Image?'轉移Picture1所繪圖為Picture2.Picture賦值
Dim?ret?As?Boolean
ret?=?PictureBoxSaveJPG(Picture2,?CommonDialog1.fileName)?'保存壓縮后的圖片
If?ret?=?False?Then
MsgBox?"保存失敗"
End?If
Exit?Sub
ErrHandler:
'?用戶按了“取消”按鈕
Exit?Sub
End?Sub
通用模塊?
VB6:工程資源管理器的右鍵菜單中的“添加”里面有標準模塊
VB.NET:類視圖空白區(qū)域右鍵菜單中“添加”類里面的“模塊”
在C#中有 靜態(tài)類 的概念 自然里邊全部的方法都是靜態(tài)的 這意味著你可以直接通過 類名 方法名 去調(diào)用(例如System的Math類就是典型) 在VB NET中 沒有 靜態(tài)類 的概念(當然你可以用 單例模式 把構造函數(shù)弄成Private的方式 其它方法都是靜態(tài)的)如果某些方法需要被其它地方頻繁使用 可以創(chuàng)建 模塊 在VB NET中一旦創(chuàng)建了模塊 其中任何方法 屬性或者變量都可以被其它地方引用 因此適合全局情況下頻繁交互的情況(比如初始化加載的參數(shù) 可能后續(xù)程序要使用)等
現(xiàn)在問題在于 如果你把一個類似以下的模塊代碼封裝成DLL類庫 無論在C#或者是VB NET中都無法引用到其方法
Module A
Public Sub Test()
End Sub
End Module
或許你感到很奇怪——不是在VB NET中這樣定義一個Module就直接可以使用其內(nèi)部方法了么?為什么封裝成類庫就不可以了呢?上網(wǎng)問了一些人 眾說紛紜 后來我在他人協(xié)助下終于成功解決了這個問題——解決方法很簡單——只要在Module前加Public
理由是 為了兼容C# VB NET由Module封裝成類庫中這個模塊不再是 模塊 而是一個標準的類了 如果這樣寫 那么在 NET中被理解成(C#)
internal A
{
public void Test()
{
}
}
整個模塊變成Internal的了!當然你到其它程序集中去引用就引用不到!而把類庫中的Module的修飾符改為Public就可以了 這就是MSDN那位友人給我最好的提示
雖然這個提示不是令我太滿意(因為要知道VB NET中可以直接不通過 類名 方式直接使用方法名) 但是這給了我很大的暗示 得出重要的結論
)VB NET中Module在制作成類庫時候等同于VB NET中的類的規(guī)則(里邊的方法都是靜態(tài)的) 默認情況下是Friend(C#是internal)
)根據(jù)結論 那么我們知道引用該DLL類庫的方法一定是 i)引用命名空間? ii)C#中直接 類名 方法名 對于VB NET 直接可以引用到方法名
lishixinzhi/Article/program/net/201311/12502
模塊層有標準??旌痛绑w模塊區(qū)分.
Visual Basic 的代碼存儲在模塊中。模塊有三種類型:窗體、標準和類。簡單的應用程序可以只有一個窗體,
應用程序的所有代碼都駐留在窗體模塊中。而當應用程序龐大復雜時,就要另加窗體。最終可能會發(fā)現(xiàn)在幾個窗體中都有要執(zhí)行的公共代碼。因為不希望在兩個窗體中重復代碼,所以要創(chuàng)建一個獨立模塊,它包含實現(xiàn)公共代碼的過程。獨立模塊應為標準模塊。此后可以建立一個包含共享過程的模塊庫。
每個標準模塊、類模塊和窗體模塊都可包含: 聲明??蓪⒊?shù)、類型、變量和動態(tài)鏈接庫 (DLL) 過程的聲明放在窗體、類或標準模塊的模塊級。過程。Sub、Function 或者 Property 過程包含可以作為單元來執(zhí)行的代碼片段。本章后面的“過程概述”一節(jié)中將討論這些內(nèi)容。
窗體模塊窗體模塊(文件擴展名為 .FRM )是大多數(shù) Visual Basic 應用程序的基礎。窗體模塊可以包含處理事件的過程、通用過程以及變量、常數(shù)、類型和外部過程的窗體級聲明。如果要在文本編輯器中觀察窗體模塊,則還會看到窗體及其控件的描述,包括它們的屬性設置值。寫入窗體模塊的代碼搜索是該窗體所屬的具體應用程序專用的;它也可以引用該應用程序內(nèi)的其它窗體或對象。標準模塊標準模塊(文件擴展名為 .BAS)是應用程序內(nèi)其它模塊訪問的過程和聲明的容器。它們可以包含變量、常數(shù)、類型、外部過程和全局過程的全局(在整個應用程序范圍內(nèi)有效的)聲明或模塊級聲明。寫入標準模塊的代碼不必綁在特定的應用程序上;如果不小心用名稱引用窗體和控件,則在許多不同的應用程序中可以重用標準模塊。
類模塊在 Visual Basic 中類模塊(文件擴展名為 .CLS)是面向對象編程的基礎??稍陬惸K中編寫代碼建立新對象。這些新對象可以包含自定義的屬性和方法。實際上,窗體正是這樣一種類模塊,在其上可安放控件、可顯示窗體窗口。注意 Visual Basic 的專業(yè)版和企業(yè)版也包含 ActiveX 文檔、ActiveX 設計器和用戶控件。它們介紹了具有不同文件擴展名的新模塊類型。從編寫代碼的角度來看,這些模塊應視同為窗體模塊。