Преобразование свободного интерфейса C # в код в VB.NET - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть следующий код C #, который я пытаюсь преобразовать в VB.NET. Я также хочу заменить Console.WriteLine на обратные вызовы.

Я думаю и надеюсь, что мне удалось преобразовать его в некоторой степени:

nInteractorsAgent
    .AddInteractorFor(currentWindowBounds, Literals.RootId, 0, currentWindowHandle.ToString(), "MyFirstActivatable")
    .WithActivatable()
    .HasActivationFocus(id => Console.WriteLine("Id: {0} got activation focus.", id))
    .SetTentativeFocusEnabled(true)
    .HasTentativeFocus(id => Console.WriteLine("Id: {0} got tentative activation focus.", id))
    .WhenFocusChanged((id, hasTentativeFocus, hasActivationFocus) => { })
    .LostFocus(id => Console.WriteLine("Id: {0} lost focus.", id))
    .WhenActivated(id => Console.WriteLine("Id: {0} activated", id));

Мой подход в VB.NET таков:

Dim v1 As VirtualInteractor = nInteractorsAgent.AddInteractorFor(currentWindowBounds, Literals.RootId, 0, "0", "MyFirstActivatable").WithActivatable().HasActivationFocus(Sub() HasActivationFocus(v1.Id)).SetTentativeFocusEnabled(True).HasTentativeFocus(Sub() HasTentativeFocus(v1.Id)).WhenFocusChanged(Sub() WhenFocusChanged(v1.Id, False, False)).LostFocus(Sub() LostFocus(v1.Id)).WhenActivated(Sub() WhenActivated(v1.Id))

Public Shared Sub HasActivationFocus(ByVal id As String)

End Sub
Public Shared Sub HasTentativeFocus(ByVal id As String)

End Sub
Public Shared Sub WhenFocusChanged(ByVal id As String, ByVal hasTentativeFocus As Boolean, ByVal hasActivationFocus As Boolean)

End Sub
Public Shared Sub WhenFocusChanged()

End Sub
Public Shared Sub LostFocus(ByVal id As String)

End Sub
Public Shared Sub WhenActivated(ByVal id As String)

End Sub

Однако, компилятор говорит мне, что что-то не так с

.WhenFocusChanged(Sub() WhenFocusChanged(v1.Id, False, False))

и

.WhenActivated(Sub() WhenActivated(v1.Id))

Компилятор сообщает мне, что версии WhenFocusChanged не существует. Декларации таковы:

    <Extension>
    Public Shared Function WhenFocusChanged(behaviors As IEnumerable(Of ActivatableBehavior), action As ActivationFocusChangedCallback) As IEnumerable(Of ActivatableBehavior)
    <Extension>
    Public Shared Function WhenFocusChanged(behavior As ActivatableBehavior, action As ActivationFocusChangedCallback) As ActivatableBehavior

Кто-нибудь может показать мне, что я здесь делаю неправильно и как это сделать правильно? Я не знаю, какая информация, помимо приведенной, важна для читателей в этом случае.

Спасибо.

1 Ответ

0 голосов
/ 14 ноября 2018

Это не будет работать как оригинальный код.Вам нужно сочетание лямбда и делегат .Вот быстрый пример чего-то похожего в vb.net.

Module Module1

    Sub Main()

        Dim o As New Test

        o.DoSomething(Sub(paramName) Console.WriteLine("The id is {0}", paramName))

    End Sub

End Module

Class Test

    Public Property ID As Integer = 10

    Delegate Sub SomeDelegate(ByVal id As Integer)

    Public Function DoSomething(ByVal f As SomeDelegate) As Test

        f(Me.ID)

        Return Me
    End Function

End Class
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...