VB.NET IDE中的可本地化选项严格

Win*_*Too 5 vb.net

创建新项目时,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下被视为错误.

Ste*_*art 5

你描述的应该工作得很好.Option Strict On对整个项目来说很常见,但是只需将它覆盖到Option Strict Off某些文件上即可.因此,您的问题很可能是其他问题.例如,也许您的问题不在于Option Strict,而是与其他选项之一,例如Option ExplicitOption Infer.


com*_*ech 4

在文件顶部设置 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。