创建新项目时,VB.NET IDE默认自动将Option Strict设置为Off.
所以我经常把Option Strict On作为一个很好的编程习惯放在我的文件之上,对于那些文件,应用了Option Strict规则.
现在(有一段时间),在创建一个新项目时,我在项目的属性/编译下将Option Strict设置为On,这样就可以应用于整个项目而无需在每个文件上指定.
但是现在我在我的项目中使用了一个外部程序,其中数据类型对我来说并不完全清楚,并且我希望为项目中的所有文件保留Option Strict,除了那个.
我尝试在该文件的顶部使用Option Strict Off,但这似乎还不够.在我的IDE/Errors选项卡下列出了许多典型错误.
如何在其下有选项严格关项目关闭选项严格的只是一个文件,在项目的编译器下的属性?
Public Class ApplicationBar
Inherits NativeWindow
' Debugging Mode On/Off
#Const DEBUG_MODE = False
' SetWindowLong selectors
Const GWL_WNDPROC = -4&
' Windows messages
Const WM_ACTIVATE = &H6
Const WM_GETMINMAXINFO = &H24
Const WM_ENTERSIZEMOVE = &H231
Const WM_EXITSIZEMOVE = &H232
Const WM_MOVING = &H216
Const WM_NCHITTEST = &H84
Const WM_NCMOUSEMOVE = &HA0
Const WM_SIZING = &H214
Const WM_TIMER = &H113
Const WM_WINDOWPOSCHANGED = &H47
' WM_SIZING Selectors
Const WMSZ_LEFT = 1
Const WMSZ_RIGHT = 2
Const WMSZ_TOP = 3
Const WMSZ_TOPLEFT = 4
Const WMSZ_TOPRIGHT = 5
Const WMSZ_BOTTOM = 6
Const WMSZ_BOTTOMLEFT = 7
Const WMSZ_BOTTOMRIGHT = 8
' Appbar messages
Const ABM_NEW = &H0
Const ABM_REMOVE = &H1
Const ABM_QUERYPOS = &H2
Const ABM_SETPOS = &H3
Const ABM_GETSTATE = &H4
Const ABM_GETTASKBARPOS = &H5
Const ABM_ACTIVATE = &H6
Const ABM_GETAUTOHIDEBAR = &H7
Const ABM_SETAUTOHIDEBAR = &H8
Const ABM_WINDOWPOSCHANGED = &H9
Const ABM_SETSTATE = &HA
' Appbar edges
Const ABE_LEFT = 0
Const ABE_TOP = 1
Const ABE_RIGHT = 2
Const ABE_BOTTOM = 3
Const ABE_UNKNOWN = 4
Const ABE_FLOAT = 5
'Appbar allowed floats
Const ABF_ALLOWLEFT = 1
Const ABF_ALLOWRIGHT = 2
Const ABF_ALLOWTOP = 4
Const ABF_ALLOWBOTTOM = 8
Const ABF_ALLOWFLOAT = 16
' The ABN_* constants are defined here as follows:
'Const ABN_STATECHANGE = &H0
Const ABN_POSCHANGED = &H1
Const ABN_FULLSCREENAPP = &H2
Const ABN_WINDOWARRANGE = &H3
' GetKeyState and GetAsyncKeyState Selectors
Const VK_LBUTTON = &H1
Const VK_RBUTTON = &H2
Const VK_CONTROL = &H11
' MessageBox Selectors
Const MB_OK = &H0&
Const MB_ICONINFORMATION = &H40&
' ModifyStyle Selectors
Const GWL_STYLE = (-16)
Const GWL_EXSTYLE = (-20)
Const WS_CAPTION = &HC00000
Const WS_SYSMENU = &H80000
Const WS_EX_APPWINDOW = &H40000
Const WS_BORDER = &H800000
' SetWindowPos Selectors
Const SWP_NOSIZE = &H1
Const SWP_NOMOVE = &H2
Const SWP_NOZORDER = &H4
Const SWP_NOACTIVATE = &H10
Const SWP_DRAWFRAME = &H20
Const HWND_NOTOPMOST = -2
Const HWND_TOPMOST = -1
Const HWND_BOTTOM = 1
' ShowWindow Selectors
Const SW_HIDE = 0
Const SW_SHOW = 5
' WM_ACTIVATE Selectors
Const WA_INACTIVE = 0
'Custom Defaults
Private Const AB_DEF_SIZE_INC As Integer = 1
Private Const AB_DEF_DOCK_SIZE As Integer = 32
' We need a timer to determine when the AppBar should be re-hidden
Const AUTO_HIDE_TIMER_ID = 100
Const SLIDE_DEF_TIMER_INTERVAL = 400 ' milliseconds
' Subclassing function default result
Const INHERIT_DEFAULT_CALLBACK = -1
Run Code Online (Sandbox Code Playgroud)
所有这些变量都带有绿色下划线,未明确声明,并在Option Strict On下被视为错误.
你描述的应该工作得很好.Option Strict On对整个项目来说很常见,但是只需将它覆盖到Option Strict Off某些文件上即可.因此,您的问题很可能是其他问题.例如,也许您的问题不在于Option Strict,而是与其他选项之一,例如Option Explicit或Option Infer.
在文件顶部设置 Option Strict Off 将正常工作。我们的做法与您完全相同(在所有代码文件的顶部添加 Option Strict On),并且还要求在新项目中将其设置为打开。
但是,偶尔会出现需要选项严格关闭的情况(例如,使用 Crystal Reports 的某些活动)。在这些情况下,我们仅隔离需要 Option Strict Off 的代码,将其移动到自己的文件中,并将指令添加到顶部。
** 基于新代码更新:
解决该问题的方法是将以下内容添加到文件顶部Option Strict Off:
Option Infer On
Run Code Online (Sandbox Code Playgroud)
这将允许 VB 自动确定并为每个对象分配适当的数据类型。
但是:如果您在 Windows API 调用中使用这些值,则必须确保 VB 为您选择的类型是正确的。您可以通过将光标悬停在声明上来完成此操作:VB 将显示完整的类型声明。
如果此文件源自另一个 VB 项目,则几乎可以肯定原始项目在项目属性中设置了 Option Infer On。