信息: Microsoft 咨询服务的 Visual Basic 的命名约定

注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。

点击这里察看该文章的英文版: 110264
本文已归档。它按“原样”提供,并且不再更新。
概要
它是一个不错的主意建立命名约定为 Visual Basic 代码。本文为您提供了 Microsoft 咨询服务 (MCS) 使用的命名约定。

本文档是超集的 Visual Basic 编码约定找到用 Visual Basic"程序员指南。

注: 本文中提及的第三方控件是由独立的 Microsoft 的供应商生产的。Microsoft 使任何担保,或暗示或其他方式,这些控件的性能或可靠性。
更多信息
命名约定有助于 Visual Basic 程序员:

  • 标准化该结构编码样式和应用程序的逻辑。
  • 创建精确、 读的明确的源代码。
  • 与其他语言约定一致的状态 (最重要的是 Visual Basic 程序员指南和标准 Windows C 匈牙利表示法)。
  • 将从字符串大小,从而允许更好的机会,对于较长的人工角度看和更完整的对象名称有效。
  • 定义在进行上述所必需的最低要求。

设置环境选项

使用显式的选项。声明所有变量以保存通过减少由键入错误 (例如对于 aUserNameTmp 与导致的 bug 数编程时间 与 sUserNameTemp sUserNameTmp)。在环境选项对话框中设置要求变量声明为是。该选项显式语句要求您声明 Visual Basic 程序中的所有变量。 将文件另存为 ASCII 文本。将窗体 (.FRM) 和模块 (.BAS) 文件保存为方便使用的版本控制系统和最大限度地减少所可以由磁盘损坏造成的损害的 ASCII 文本。此外,您可以执行以下操作:

  • 使用您自己的编辑器
  • 使用诸如 grep 这样的自动化的工具
  • 为 Visual Basic 创建代码生成或 CASE 工具
  • 执行外部分析的 Visual Basic 代码
若要始终从环境选项对话框将文件保存为 ASCII 文本的 Visual Basic 将默认将另存为格式选项设置为文本。

常用的对象的对象命名约定

下表定义 MCS 标准对象名前缀。这些前缀都与 Visual Basic 程序员指南 》 中的文档保持一致。
Prefix    Object Type                           Example-------------------------------------------------------ani       Animation button                      aniMailBoxbed       Pen Bedit                             bedFirstNamecbo       Combo box and drop down list box      cboEnglishchk       Checkbox                              chkReadOnlyclp       Picture clip                          clpToolbarcmd (3d)  Command button (3D)                   cmdOk (cmd3dOk)com       Communications                        comFaxctr       Control (when specific type unknown)  ctrCurrentdat       Data control                          datBibliodir       Directory list box                    dirSourcedlg       Common dialog control                 dlgFileOpendrv       Drive list box                        drvTargetfil       File list box                         filSourcefrm       Form                                  frmEntryfra (3d)  Frame (3d)                            fraStyle (fra3dStyle)gau       Gauge                                 gauStatusgpb       Group push button                     gpbChannelgra       Graph                                 graRevenuegrd       Grid                                  grdPriceshed       Pen Hedit                             hedSignaturehsb       Horizontal scroll bar                 hsbVolumeimg       Image                                 imgIconink       Pen Ink                               inkMapkey       Keyboard key status                   keyCapslbl       Label                                 lblHelpMessagelin       Line                                  linVerticallst       List box                              lstPolicyCodesmdi       MDI child form                        mdiNotempm       MAPI message                          mpmSentMessagemps       MAPI session                          mpsSessionmci       MCI                                   mciVideomnu       Menu                                  mnuFileOpenopt (3d)  Option Button (3d)                    optRed (opt3dRed)ole       OLE control                           oleWorksheetout       Outline control                       outOrgChartpic       Picture                               picVGApnl3d     3d Panel                              pnl3drpt       Report control                        rptQtr1Earningsshp       Shape controls                        shpCirclespn       Spin control                          spnPagestxt       Text Box                              txtLastNametmr       Timer                                 tmrAlarmvsb       Vertical scroll bar                   vsbRate				

对象的数据库对象的命名约定

Prefix        Object Type          Example------------------------------------------db            ODBC Database        dbAccountsds            ODBC Dynaset object  dsSalesByRegionfdc           Field collection     fdcCustomerfd            Field object         fdAddressix            Index object         ixAgeixc           Index collection     ixcNewAgeqd            QueryDef object      qdSalesByRegionqry (suffix)  Query (see NOTE)     SalesByRegionQryss            Snapshot object      ssForecasttb            Table object         tbCustomertd            TableDef object      tdCustomers				
注: 对查询使用后缀允许每个查询,以与它相关联的表,在 Microsoft Access 对话框列表表快照中的添加表) 中进行排序。

菜单命名约定

应用程序经常使用的大量菜单控件。如此一来,您需要为这些控件一组不同的命名约定。通过添加为每个级别的嵌套,最终的菜单标题的名称字符串末尾带有一个附加前缀,应将菜单控件前缀扩展超出初始 mnu 标签。例如:
Menu Caption Sequence   Menu Handler NameHelp.Contents           mnuHelpContentsFile.Open               mnuFileOpenFormat.Character        mnuFormatCharacterFile.Send.Fax           mnuFileSendFaxFile.Send.Email         mnuFileSendEmail				
下拉在对象下拉列表框 (在代码窗口和属性窗口中) 时使用此约定,相邻列出特定菜单组中的所有成员。此外,菜单控件名称清楚记录附加到该菜单项。

其他控件的命名约定

上面未列出的新控件的尝试以拿出唯一的三个字符前缀。但是,很多一定要清除与要粘贴到三个字符。

对于如一个增强型的列表框的派生控件扩展上面的前缀,这样的控件上没有任何混淆确实使用。一个小写的缩写制造商通常还将添加到前缀。例如对于创建三维框架可以在 Visual Basic 专业从一个控件实例将使用 fra3d 的前缀,以避免的混淆确实正在其上使用控件。从 MicroHelp 命令按钮可以使用 cmdm 以使它区别于标准的命令按钮 (cmd)。

第三方控件

每个应用程序中使用的第三方控件应列出在应用程序的概述注释部分中,提供用于在控件、 控件的完整名称和软件供应商的名称的前缀:
Prefix    Control Type        Vendorcmdm      Command Button      MicroHelp				

变量和 $ 例程命名

变量和函数的名称具有以下结构: <prefix><body><qualifier><suffix>
Part          Description                                  Example--------------------------------------------------------------------------<prefix>      Describes the use and scope of the variable. iGetRecordNext<body>        Describes the variable.                      iGetNameFirst<qualifier>   Denotes a derivative of the variable.        iGetNameLast<suffix>      The optional Visual Basic type character.    iGetRecordNext%				
前缀:

下表定义了基于 Windows 的 C 匈牙利表示法的变量和函数名前缀。这些前缀应该用于所有变量和函数名。使用旧的基本后缀 (如 %,&,#,等) 是反对这样做。

变量和函数名前缀:
Prefix    Converged    Variable Use         Data Type  Suffix--------------------------------------------------------------------------b         bln          Boolean              Integer    %c         cur          Currency - 64 bits   Currency   @d         dbl          Double - 64 bit      Double     #                       signed quantitydt        dat          Date and Time        Variante         err          Errorf         sng          Float/Single - 32    Single     !                       bit signed                       floating pointh                      Handle               Integer    %i                      Index                Integer    %l         lng          Long - 32 bit        Long       &                       signed quantityn         int          Number/Counter       Integer    %s         str          String               String     $u                      Unsigned - 16 bit    Long       &                       unsigned quantity          udt          User-defined typevnt       vnt          Variant              Varianta                      Array				
注: Converged 列中的值表示拉一起命名标准的 Visual Basic,Visual Basic 用于应用程序,和访问基本的努力。很可能这些前缀将在不久的将来成为 Microsoft 在某一时刻的标准。

作用域和 $ 使用前缀:
Prefix         Descriptiong              Globalm              Local to module or formst             Static variable(no prefix)    Non-static variable, prefix local to procedurev              Variable passed by value (local to a routine)r              Variable passed by reference (local to a routine)				
匈牙利表示法是在 Visual Basic 中 C.中是作为有价值虽然 Visual Basic 类型后缀并表示变量的数据类型,但他们不说明变量或函数的用途,或如何访问它。下面是一些示例:
iSend-表示发送的邮件数的计数
bSend-A 布尔型标志定义的最后一次发送操作成功
hSend-A 处理通信接口
每个这些变量的名称告诉程序员非常不同的地方。 当在变量名会减少,从而发送 %时,此信息将丢失。作用域前缀,如 g 和 m 还有助于减少名称争用,尤其是在多开发人员的项目中的问题。

匈牙利表示法是由 Windows C 程序员也广泛使用,不断地引用 Microsoft 产品文档中和在行业编程书籍。此外,C 编程人员和程序员使用 Visual Basic 之间债券将成为为 Visual c + + 开发系统收益发展的步伐得更强。此转换将导致将移动到 C 的第一次,这两个环境之间来回移动频繁的很多程序员的很多 Visual Basic 程序员。

正文的变量和例行名称

正文的变量或例程的名称应使用混合大小写,并应根据需要来描述其目的一样长。此外,函数的名称应以开头,如 InitNameArray 或 CloseDialog 的一个谓词。

常用的或长术语是以保持名称长度合理推荐标准的缩写。一般情况下,大于 32 个字符的变量名可能很难阅读 VGA 显示。

在使用缩写时请确保在整个应用程序保持一致。随机切换 Cnt 和计数在项目中将导致不必要的混淆。

变量和例行名称的限定符

相关的变量和例程通常用于管理和操作公共对象。在这种情况下使用标准的限定符衍生的变量和例程的标签。尽管后的名称正文看起来可能有点改进 (如在 sGetNameFirst,代替 sGetFirstName,sGetLastName sGetNameLast),将限定符,但本练习中将帮助逻辑和应用程序的结构,使其更容易理解这些名称在 Visual Basic 编辑器例程一起列出的顺序。 下表定义了公共限定符和其标准含义:
Qualifier  Description (follows Body)--------------------------------------------------------------------------First      First element of a set.Last       Last element of a set.Next       Next element in a set.Prev       Previous element in a set.Cur        Current element in a set.Min        Minimum value in a set.Max        Maximum value in a set.Save       Used to preserve another variable that must be reset later.Tmp        A "scratch" variable whose scope is highly localized within the           code. The value of a Tmp variable is usually only valid across           a set of contiguous statements within a single procedure.Src        Source. Frequently used in comparison and transfer routines.Dst        Destination. Often used in conjunction with Source.				

用户定义的类型

符号名的末尾追加 _TYPE 与声明中全部大写的用户定义类型。例如:
Type CUSTOMER_TYPE      sName As String      sState As String * 2      lID as Long   End Type				
时声明实例变量的用户定义的类型为引用类型变量名添加一个前缀。例如:
   Dim custNew as CUSTOMER_TYPE				

命名常量

常数名称的正文应该 UPPER_CASE 单词之间的下划线 (_) 开头。虽然标准的 Visual Basic 常数不能包括匈牙利信息,前缀 (如 i、 s、 g,和 m 可以是非常有用,在了解值和常数的范围。为常数的名称遵循与变量相同的规则。例如:
<mnUSER_LIST_MAX   ' Max entry limit for User list (integer value,                     ' local to module)   gsNEW_LINE        ' New Line character string (global to entire                     ' application)				

variant 数据类型

如果您知道变量将始终存储特定类型的数据,Visual Basic 可以数据的更有效地处理如果声明该类型的变量。

但是,使用数据库、 邮件、 DDE,或 OLE 时,变量数据类型可以是非常有用。许多数据库中允许 null 值作为字段的有效值。您的代码需要区分 NULL,0 (零) 和""(空字符串)。很多的时候这些类型的操作可以使用不需要知道它处理或通过在数据上接收的数据类型的一个通用服务例程。例如:
   Sub ConvertNulls(rvntOrg As Variant, rvntSub As Variant)      ' If rvntOrg = Null, replace the Null with rvntSub      If IsNull(rvntOrg) Then rvntOrg = rvntSub   End Sub				
的是一些缺点,但是,使用变体。使用变体的代码语句有时可以向程序员不明确。例如:
   vnt1 = "10.01" : vnt2 = 11 : vnt3 = "11" : vnt4 = "x4"   vntResult = vnt1 + vnt2  ' Does vntResult = 21.01 or 10.0111?   vntResult = vnt2 + vnt1  ' Does vntResult = 21.01 or 1110.01?   vntResult = vnt1 + vnt3  ' Does vntResult = 21.01 or 10.0111?   vntResult = vnt3 + vnt1  ' Does vntResult = 21.01 or 1110.01?   vntResult = vnt2 + vnt4  ' Does vntResult = 11x4 or ERROR?   vntResult = vnt3 + vnt4  ' Does vntResult = 11x4 or ERROR?				
上述示例中的将是小得多的二义性和易于阅读、 调试,和维护是否转而使用了 Visual Basic 类型转换例程。例如:
   iVar1 = 5 + val(sVar2)   ' use this (explicit conversion)   vntVar1 = 5 + vntVar2    ' not this (implicit conversion)				

注释代码

所有过程和函数应都开头描述功能特征的例程 (它做什么) 的简短注释。该描述不应描述实现细节 (如何它不它),因为这些通常随时间更改,还,从而导致不必要的注释的维护工作或更糟错误批注。代码本身以及任何所需的行中或本地注释将描述实现。

参数传递给一个例程应描述其功能并不明显时该例程预期在特定范围参数。函数返回值,并由该例程 (尤其是通过引用参数) 更改的全局变量还必须在每个例程的开头描述。

例行的标头注释块应查找喜欢此 (请参阅下一节"格式代码"示例):
Section    Comment Description--------------------------------------------------------------------------Purpose    What the routine does (not how).Inputs     Each non-obvious parameter on a separate line with           in-line commentsAssumes    List of each non-obvious external variable, control, open file,           and so on.Returns    Explanation of value returned for functions.Effects    List of each effected external variable, control, file, and           so on and the affect it has (only if this is not obvious)				
间隔不常用的变量声明应包括一个串联注释,用以描述被声明变量的用途。

变量、 控件,和例程的命名应当足够清楚注释行中只需要进行复杂或非直观的实现详细信息。

对话框的应用程序枚举主要数据对象,例程,算法,概述说明、 数据库和文件系统依赖项等应在包含项目的 Visual Basic 泛型常量声明.BAS 模块的开始处包含。

注: 项目窗口本身描述使此概述部分只需要提供了有关最重要的文件和模块,一个项目中的文件或文件没有列出工程窗口,如初始化 (.ini) 或数据库文件的列表。

格式代码

因为很多程序员仍使用 VGA 显示,屏幕房地产必须被 conserved 多达可能同时仍然允许代码以反映逻辑结构和嵌套格式设置。

嵌套缩进的标准的、 基于选项卡的块应为两个或四个空格。四个以上空格是不必要的并且可能导致要隐藏的或意外地截断的语句。少于两个空格不足够显示逻辑嵌套。Microsoft 知识库中,我们使用三个空格缩进。使用环境选项对话框来设置默认选项卡宽度。

功能概述注释应该是例程的缩进一个空格。 下面概述注释的最高级别语句应该为每个的缩进一个制表嵌套的块缩进一个其他选项卡。例如:
**************************************************************************'Purpose:   Locate first occurrence of a specified user in UserList array.'Inputs:    rasUserList():  the list of users to be searched'           rsTargetUser:   the name of the user to search for'Returns:   the index of the first occurrence of the rsTargetUser'           in the rasUserList array. If target user not found, return -1.'**************************************************************************'VB3Line: Enter the following lines as one lineFunction iFindUser (rasUserList() As String, rsTargetUser as String) _   As Integer   Dim i As Integer           ' loop counter   Dim bFound As Integer      ' target found flag   iFindUser = -1   i = 0   While i <= Ubound(rasUserList) and Not bFound      If rasUserList(i) = rsTargetUser Then         bFound = True         iFindUser = i      End If   WendEnd Function				
应分组变量和非泛型常量,由函数而不是被关闭拆分成独立的区域或特殊的文件。Visual Basic 泛型常量,如沙漏单个模块 (VB_STD.BAS) 以使它们相互独立的特定于应用程序的声明中进行分组。

运算符

始终使用时连接字符串,and 符号 (&amp;),并使用数字值时使用加号 (+)。两个变量时,使用加号 (+) 与非数字值,可能会导致问题。 例如:
   vntVar1 = "10.01"   vntVar2 = 11   vntResult = vntVar1 + vntVar2         ' vntResult =  21.01   vntResult = vntVar1 & vntVar2         ' vntResult = 10.0111				

作用域

始终应该具有可能的最小作用域定义变量。 全局变量可以创建提升复杂的状态机,并使应用程序的逻辑极难理解。全局变量还使重复使用和维护代码变得更加困难。 在 Visual Basic 中的变量可以具有以下作用域:
Scope             Variable Declared In:            Visibility--------------------------------------------------------------------------Procedure-level   Event procedure, sub, or         Visible in the                  function                         procedure in which                                                   it is declaredForm-level,       Declarations section of a form   Visible in everyModule-level      or code module (.FRM, .BAS)      procedure in the                                                   form or code                                                   moduleGlobal            Declarations section of a code   Always visible                  module (.BAS, using Global                  keyword)				
在一个 vba 应用程序中只能使用全局变量时没有其他方便的方法的窗体之间共享数据。您可能要考虑将信息存储在一个控件的 Tag 属性可以是全局范围内使用 form.object.property 语法访问。

如果必须使用全局变量,它是很好的做法,可将所有这些单个模块中声明,按组依据对它们分组函数。为模块指定有意义的名称,它指示它如 GLOBAL.BAS 的用途。

(这不应传递) 的全局变量、 过程和函数的除外只应对传递到它们的对象执行操作。在例程中使用的全局变量应在一般的注释区域中,该例程的开头进行标识。此外,将参数传递到子例程和函数使用 ByVal,除非您明确想要更改已传递的参数的值。

编写尽可能的模块化代码。例如对于如果您的应用程序显示一对话框将所有控件和执行在单个窗体中的对话框的任务所需的代码。这有助于组织到有用的组件的应用程序的代码,并最大限度地减少了其运行时开销。

第三方控件

注: 下面讨论的产品是由独立的 Microsoft 的供应商生产的。Microsoft 使任何担保,或暗示或其他方式,这些产品的性能或可靠性。

下表列出了标准的第三方供应商名称前缀字符与控件前缀一起使用:
Vendor               Abbv-------------------------MicroHelp (VBTools)  mPioneer Software     pCrescent Software    cSheridan Software    sOther (Misc)         o				
下表列出了标准的第三方控件前缀:
Control         Control     Abbr  Vendor     Example            VBX FileType            Name                                            Name--------------------------------------------------------------------------Alarm           Alarm       almm  MicroHelp  almmAlarm          MHTI200.VBXAnimate         Animate     anim  MicroHelp  animAnimate        MHTI200.VBXCallback        Callback    calm  MicroHelp  calmCallback       MHAD200.VBXCombo Box       DB_Combo    cbop  Pioneer    cbopComboBox       QEVBDBF.VBXCombo Box       SSCombo     cbos  Sheridan   cbosComboBox       SS3D2.VBXCheck Box       DB_Check    chkp  Pioneer    chkpCheckBox       QEVBDBF.VBXChart           Chart       chtm  MicroHelp  chtmChart          MHGR200.VBXClock           Clock       clkm  MicroHelp  clkmClock          MHTI200.VBXButton          Command     cmdm  MicroHelp  cmdmCommandButton  MHEN200.VBX                ButtonButton          DB_Command  cmdp  Pioneer    cmdpCommandButton  QEVBDBF.VBXButton (Group)  Command     cmgm  MicroHelp  cmgmBtton          MHGR200.VBX                Button                (multiple)Button          Command     cmim  MicroHelp  cmimCommandButton  MHEN200.VBX                Button                (icon)CardDeck        CardDeck    crdm  MicroHelp  crdmCard           MHGR200.VBXDice            Dice        dicm  MicroHelp  dicmDice           MHGR200.VBXList Box (Dir)  SSDir       dirs  Sheridan   dirsDirList        SS3D2.VBXList Box (Drv)  SSDrive     drvs  Sheridan   drvsDriveList      SS3D2.VBXList Box (File) File List   film  MicroHelp  filmFileList       MHEN200.VBXList Box (File) SSFile      fils  Sheridan   filsFileList       SS3D2.VBXFlip            Flip        flpm  MicroHelp  flpmButton         MHEN200.VBXScroll Bar      Form Scroll fsrm  MicroHelp  fsrmFormScroll     ???Gauge           Gauge       gagm  MicroHelp  gagmGauge          MHGR200.VBXGraph           Graph       gpho  Other      gphoGraph          XYGRAPH.VBXGrid            Q_Grid      grdp  Pioneer    grdpGrid           QEVBDBF.VBXScroll Bar      Horizontal  hsbm  MicroHelp  hsbmScroll         MHEN200.VBX                Scroll BarScroll Bar      DB_HScroll  hsbp  Pioneer    hsbpScroll         QEVBDBF.VBXGraph           Histo       hstm  MicroHelp  hstmHistograph     MHGR200.VBXInvisible       Invisible   invm  MicroHelp  invmInvisible      MHGR200.VBXList Box        Icon Tag    itgm  MicroHelp  itgmListBox        MHAD200.VBXKey State       Key State   kstm  MicroHelp  kstmKeyState       MHTI200.VBXLabel           Label (3d)  lblm  MicroHelp  lblmLabel          MHEN200.VBXLine            Line        linm  MicroHelp  linmLine           MHGR200.VBXList Box        DB_List     lstp  Pioneer    lstpListBox        QEVBDBF.VBXList Box        SSList      lsts  Sheridan   lstsListBox        SS3D2.VBXMDI Child       MDI Control mdcm  MicroHelp  mdcmMDIChild       ???Menu            SSMenu      mnus  Sheridan   mnusMenu           SS3D3.VBXMarque          Marque      mrqm  MicroHelp  mrqmMarque         MHTI200.VBPicture         OddPic      odpm  MicroHelp  odpmPicture        MHGR200.VBXPicture         Picture     picm  MicroHelp  picmPicture        MHGR200.VBXPicture         DB_Picture  picp  Pioneer    picpPicture        QEVBDBF.VBXProperty Vwr    Property    pvrm  MicroHelp  pvrmPropertyViewer MHPR200.VBX                ViewerOption (Group)  DB_RadioGroup radp Pioneer   radqRadioGroup     QEVBDBF.VBXSlider          Slider      sldm  MicroHelp  sldmSlider         MHGR200.VBXButton (Spin)   Spinner     spnm  MicroHelp  spnmSpinner        MHEN200.VBXSpreadsheet     Spreadsheet sprm  MicroHelp  sprmSpreadsheet    MHAD200.VBXPicture         Stretcher   strm  MicroHelp  strmStretcher      MHAD200.VBXScreen Saver    Screen Saver svrm MicroHelp  svrmSaver          MHTI200.VBXSwitcher        Switcher    swtm  MicroHelp  swtmSwitcher       ???List Box        Tag         tagm  MicroHelp  tagmListBox        MHEN200.VBXTimer           Timer       tmrm  MicroHelp  tmrmTimer          MHTI200.VBXToolBar         ToolBar     tolm  MicroHelp  tolmToolBar        MHAD200.VBXList Box        Tree        trem  MicroHelp  tremTree           MHEN200.VBXInput Box       Input (Text) txtm MicroHelp  inpmText           MHEN200.VBXInput Box       DB_Text     txtp  Pioneer    txtpText           QEVBDBF.VBXScroll Bar      Vertical    vsbm  MicroHelp  vsbmScroll         MHEN200.VBX                Scroll BarScroll Bar      DB_VScroll  vsbp  Pioneer    vsbpScroll         QEVBDBF.VBX				

警告:本文已自动翻译

属性

文章 ID:110264 - 上次审阅时间:12/04/2015 09:57:03 - 修订版本: 1.1

Microsoft Visual Basic 4.0 标准版, Microsoft Visual Basic 4.0 专业版, Microsoft Visual Basic 4.0 专业版, Microsoft Visual Basic 4.0 16-bit Enterprise Edition, Microsoft Visual Basic 4.0 32-Bit Enterprise Edition, Microsoft Visual Basic 2.0 Standard Edition, Microsoft Visual Basic 3.0 Professional Edition, Microsoft Visual Basic 2.0 Professional Edition, Microsoft Visual Basic 3.0 Professional Edition

  • kbnosurvey kbarchive kbmt kb3rdparty kbdocs kbinfo kbprogramming kbref kbtophit KB110264 KbMtzh
反馈