【问题标题】:Use shared/static Property with Activator.CreateInstance将共享/静态属性与 Activator.CreateInstance 一起使用
【发布时间】:2014-11-11 13:59:38
【问题描述】:

我正在将 .NET 2.0 WinForms 应用程序升级到 .NET 4.5.2,并收到关于此代码块的两个警告:

Public Sub ShowFormAsMdiChild(ByVal newFormType As Type, _
                              ByVal mdiParentType As Type, _
                              Optional ByVal SearchID As String = "",
                              Optional ByVal curType As SearchType = SearchType.Residential)

    If SearchID = "" Then
        Dim F As Form
        F = CType(Activator.CreateInstance(newFormType), Form)
        F.MdiParent = CType(Activator.CreateInstance(mdiParentType), Form).ActiveForm
        F.Show()
    Else
        Dim F As Form
        Dim args(1) As Object
        args(0) = SearchID
        args(1) = curType

        F = CType(Activator.CreateInstance(newFormType, args), Form)
        F.MdiParent = CType(Activator.CreateInstance(mdiParentType), Form).ActiveForm
        F.Show()
    End If
End Sub

我在设置 F.MdiParent 的两行收到以下警告:

共享成员、常量成员、枚举成员或嵌套类型的访问 通过一个实例;不计算限定表达式。

问题在于 ActiveForm 属性是共享属性,并且由于代码正在创建表单的新实例,因此调用表单的共享属性会导致警告。

有没有更好的方法来实施而不发出警告? VB.NET 中的首选答案,但如果您只知道 C# 中的方法,我可以翻译。

【问题讨论】:

    标签: c# .net vb.net winforms


    【解决方案1】:

    无需创建 MDI 父类型的新实例,然后将其转换为 FormActiveFormForm 类的共享属性,因此您应该通过类名而不是实例来访问它。

    F.MdiParent = Form.ActiveForm
    

    【讨论】:

      猜你喜欢
      • 2023-03-21
      • 1970-01-01
      • 2013-10-09
      • 2011-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-13
      相关资源
      最近更新 更多