Я обновляю приложение.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 является общим свойством и потому что код создает новый экземпляр формы, вызвав свойство shared shared, вызывает предупреждение.
Есть ли лучший способ реализовать без предупреждения? Предпочтительный ответ в VB.NET, но я могу перевести, если вы только знаете, как в С#.
Нет необходимости создавать новый экземпляр родительского типа MDI, а затем передавать его в Form
. ActiveForm
является общим свойством класса Form
, поэтому вы должны получить к нему доступ через имя класса, а не через экземпляр.
F.MdiParent = Form.ActiveForm