【问题标题】:How to Resolve 'Computer' is ambiguous between declarations in Modules 'GlbSoft.SWB.SS.My.MyProject' and 'GlbSoft.SWB.SS.My.MyProject'如何解决“计算机”在模块“GlbSoft.SWB.SS.My.MyProject”和“GlbSoft.SWB.SS.My.MyProject”中的声明之间不明确
【发布时间】:2014-10-03 18:37:50
【问题描述】:

我正在尝试访问运行 VBA/VB.NET 的计算机上的当前 NUM LOCK 设置: - Windows 7的 - 视觉工作室 2010 - 微软(Office)Excel 2010

代码如下:

Public Const _GlobalDefinitions As String = "GlobalDefinitions"
Public Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Integer, ByVal dwExtraInfo As Integer)
Public Const VK_NUMLOCK As Integer = &H90
Public Const KEYEVENTF_EXTENDEDKEY As Integer = &H1
Public Const KEYEVENTF_KEYUP As Integer = &H2
Public InitialNumLockState As Boolean

Public Sub CheckNumLockState(Optional mWriteback As SSWriteback = Nothing)
    Try
        If InitialNumLockState Then
            If Not My.Computer.Keyboard.NumLock Then
                keybd_event(VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0)
                keybd_event(VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0)
            End If
        End If
    Catch ex As Exception
        If Not mWriteback Is Nothing Then
            AddToErrorLog(mWriteback, _GlobalDefinitions & ":" & System.Reflection.MethodBase.GetCurrentMethod.Name.ToString & "> " & ex.Message & ", " & ex.StackTrace, TraceEventType.Error)
        End If
    End Try
End Sub

InitialNumLockState 变量在该过程的早期设置如下:

    InitialNumLockState = My.Computer.Keyboard.NumLock  

My.Computer.KeyBoard.NumLock 的初始引用工作正常(我可以在运行时的 Watch 窗口中查询它)并初始化 InitialNumLockState 变量,例如,如果 NUM LOCK 键则为 True开启。

然而,在第二次引用 My.Computer.KeyBoard.NumLock 时,我收到以下错误:

“计算机”在模块“GlbSoft.SWB.SS.My.MyProject”和“GlbSoft.SWB.SS.My.MyProject”中的声明不明确。

请注意,错误消息表明引用不明确,因为它存在于两个同名的模块中。当然,这是不可能的。只涉及一个项目/命名空间 (GSI_SWB_SS/GlbSoft.SWB.SS)。

是否有人对此错误有任何想法或见解,以及可以查看什么来解决它?

【问题讨论】:

    标签: vb.net reference declaration ambiguous


    【解决方案1】:

    此时我在我的应用程序中遇到了同样的问题。 我认为 VS 在每个.dll 的每个My 中创建Computer 的实例。 我绕过了这个问题。

    在我的应用程序中,我添加了一个基础设施层

    Namespace Infrastructure.MYLOCAL
      <HideModuleName> _
      Public Module MYLOCAL
        Public MYComputer = My.Computer
      End Module
    End Namespace
    

    由于我的整个应用程序都使用了基础设施层,所以它可以工作。 我使用MYComputer 而不是my.Computer

    【讨论】:

      猜你喜欢
      • 2018-10-25
      • 2017-11-09
      • 2019-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-30
      • 1970-01-01
      • 2021-09-14
      相关资源
      最近更新 更多