Vb.net 有没有办法确定窗体上调用单独类库中方法的属性的值

Vb.net 有没有办法确定窗体上调用单独类库中方法的属性的值,vb.net,winforms,Vb.net,Winforms,专门针对winforms开发 我怀疑答案可能是否定的,但S.O.有一种很好的方式向我介绍我不知道的事情,所以我想我还是会问 我有一个类库,其中包含许多已定义的方法。我从个人实验中了解到,可以获得有关引用类库的应用程序的信息。我想知道的是,当窗体上的例程调用我的类库中的方法时,是否有可能获取有关窗体上控件属性值的信息,而不将对该窗体的特定引用作为类库中方法的参数传递 这纯粹是一个例子(因为这是我脑子里唯一能想到的事情)。有没有一种方法可以让消息框(如果它最初设计为这样做的话)能够“知道”从哪个表单

专门针对winforms开发

我怀疑答案可能是否定的,但S.O.有一种很好的方式向我介绍我不知道的事情,所以我想我还是会问

我有一个类库,其中包含许多已定义的方法。我从个人实验中了解到,可以获得有关引用类库的应用程序的信息。我想知道的是,当窗体上的例程调用我的类库中的方法时,是否有可能获取有关窗体上控件属性值的信息,而不将对该窗体的特定引用作为类库中方法的参数传递

这纯粹是一个例子(因为这是我脑子里唯一能想到的事情)。有没有一种方法可以让消息框(如果它最初设计为这样做的话)能够“知道”从哪个表单调用它,而不需要将该表单作为消息框的参数专门引用


感谢您提供的任何见解。

要解决MessageBox的示例,在许多情况下,您可以使用活动表单。您可以使用来检索它。当然,关于您可以请求的属性,您仅限于表单或表单实现的接口提供的属性,以及其他程序集中的方法也知道的属性。要访问其他属性,可以使用反射,但这种方法既不简单,也不干净

在更一般的场景中,可以将属性值作为参数提供给方法。如果检索属性的值非常复杂,并且不是每次都需要该值,则可以为检索该值的方法提供如下示例(整数属性的示例):

您可以这样调用该方法:

Public Sub SubInForm()
   Dim x As New ClassInOtherAssembly()
    x.DoSomethingWithAPropertyValue(Function() Me.IntegerProperty)
End Sub

我有点怀疑你的意图。将信息发送到函数或构造函数没有问题

该类不向类提供信息,而是使用事件请求信息

Module Module1

    Sub Main()

        Dim t As New Test

        AddHandler t.GetValue, AddressOf GetValue

        t.ShowValue()
        Console.ReadLine()

    End Sub

    Public Sub GetValue(ByRef retVal As Integer)
        retVal = 123
    End Sub

End Module

Class Test

    Public Delegate Sub DelegateGetValue(ByRef retVal As Integer)
    Public Event GetValue As DelegateGetValue

    Public Sub ShowValue()

        Dim val As Integer

        RaiseEvent GetValue(val)

        Console.WriteLine(val)

    End Sub

End Class

嗨,马库斯,谢谢你的回答。我没有考虑Form.ActiveForm,但考虑到我真正想要的属性将属于附加到活动表单的控件,我怀疑最好将该属性作为方法本身的参数直接传递给方法,而不是尝试使用反射,正如您正确指出的那样,反射可以得到多姆辛克莱:是的,反思应该是最后的选择。如果可以将值作为参数传递,这是最简单的方法。如果可以将值作为参数传递给方法,请不要寻找后门。同样重要的是,避免依赖类库中的UI。改为使用事件。
Module Module1

    Sub Main()

        Dim t As New Test

        AddHandler t.GetValue, AddressOf GetValue

        t.ShowValue()
        Console.ReadLine()

    End Sub

    Public Sub GetValue(ByRef retVal As Integer)
        retVal = 123
    End Sub

End Module

Class Test

    Public Delegate Sub DelegateGetValue(ByRef retVal As Integer)
    Public Event GetValue As DelegateGetValue

    Public Sub ShowValue()

        Dim val As Integer

        RaiseEvent GetValue(val)

        Console.WriteLine(val)

    End Sub

End Class