5

新しいプロジェクトを作成すると、VB.NET IDE は自動的に Option Strict をデフォルトで Off に設定します。
そのため、私はよくOption Strict Onをファイルの先頭に置き、適切なプログラミングの実践として、そのファイルに Option Strict のルールを適用しています。

ここで(しばらくの間)、新しいプロジェクトを作成するときに、プロジェクトのプロパティ/コンパイルの下で Option Strict をオンに設定して、すべてのファイルで指定する必要なくプロジェクト全体に適用されるようにします。

しかし、現在、データ型が完全にはわかっていないプロジェクトで1つの外部プログラムを使用しており、プロジェクト内のすべてのファイルに対して Option Strict を保持したいと考えています。

そのファイルの先頭でOption Strict Offを試してみましたが、それでは十分ではないようです。私のIDE/エラータブの下に、典型的なエラーの多くがリストされています。

プロジェクトの Compiler プロパティでOption Strict がオンになっているプロジェクトの下の 1 つのファイルだけに対して Option Strict をオフにする方法は?

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

これらの変数はすべて明示的に宣言されていないため緑色の下線が引かれ、Option Strict On ではエラーとして扱われます。

4

2 に答える 2

5

あなたが説明したものはうまくいくはずです。Option Strict Onプロジェクト全体で使用するのは非常に一般的ですがOption Strict Off、特定のファイルでオーバーライドするだけです。したがって、あなたの問題はおそらく別のものです。たとえば、おそらく問題はではなく、またはOption Strictなどの他のオプションのいずれかにあります。Option ExplicitOption Infer

于 2013-10-08T19:17:15.843 に答える
4

ファイルの先頭で Option Strict Off を設定すると、正しく機能します。私たちはあなたとまったく同じことを行い (すべてのコード ファイルの先頭に Option Strict On を追加します)、新しいプロジェクトでもそれをオンにする必要があります。

ただし、Option Strict Off が必要になるシナリオもあります (Crystal Reports を使用した特定のアクティビティなど)。このような場合、Option Strict Off を必要とするコードだけを分離し、それを独自のファイルに移動して、ディレクティブを先頭に追加します。

** 新しいコードに基づく更新:

この問題の解決策は、に加えてファイルの先頭に次を追加することですOption Strict Off

Option Infer On

これにより、VB は適切なデータ型を自動的に決定し、各オブジェクトに割り当てることができます。

ただし、Windows API 呼び出しでこれらの値を使用している場合は、VB が選択する型が正しいことを確認する必要があります。これを行うには、宣言の上にカーソルを置きます。VB は完全な型宣言を表示します。

このファイルが別の VB プロジェクトで作成されたものである場合、元のプロジェクトのプロジェクト プロパティで Option Infer On が設定されていることはほぼ確実です。

于 2013-10-08T19:19:07.637 に答える