【问题标题】:VB.NET Using Interface, Reflection, and DLL to Access Main Form Controls PropertiesVB.NET 使用接口、反射和 DLL 访问主窗体控件属性
【发布时间】:2011-09-12 17:17:31
【问题描述】:

我有一个主窗体、一个单独的插件接口 dll 和另一个单独的 dll。现在这是我的问题: 我想访问主窗体控件的属性,以便在其他 dll 中进行操作。

示例: 主窗体 插件.dll 数据.dll

主窗体有标签控件 我在接口 Plugins.dll 中定义属性 从 Data.dll 我加载插件以从主窗体读取标签控件

问题是我该怎么做?您能否在此处发布示例代码。谢谢。

【问题讨论】:

    标签: vb.net reflection dll interface


    【解决方案1】:

    最好创建一个单独的函数来执行任务并导出函数。

    【讨论】:

      【解决方案2】:

      如果您可以控制主窗体接口 dll 和插件,最简单的设计模式是创建一个主窗体实现的接口。

      Public Interface IMainForm
          Property Mainlabel As System.Windows.Forms.Label
      End Interface
      
      Public Class MyForm
          Inherits System.Windows.Forms.Form
          Implements IMainForm
      
          Public lbl As System.Windows.Forms.Label
      
          Public Property Mainlabel As System.Windows.Forms.Label Implements IMainForm.Mainlabel
              Get
                  Return lbl
              End Get
              Set(value As System.Windows.Forms.Label)
                  lbl = value
              End Set
          End Property
      End Class
      

      然后在扩展调用代码中将 ref 传递给 Imain 表单,无需反射。

      【讨论】:

      • 我已经实现了这种代码,并且在一定程度上可以正常工作。但是,其他类需要知道要写入数据的具体标签控件。所以我需要传递控件的名称而不是声明一个新的标签控件类型。我所做的是这样的:我接口一个方法并在主窗体上添加控件,然后我在 dll 中调用该方法。令我惊讶的是,该方法运行但内部的控件 (label.text="something") 没有执行。这不会返回任何错误。你怎么看?
      • 该界面将允许它“知道”您在界面中输入的任何内容。不确定我是否理解您的情况。
      • 是的,你是对的,接口运行方法。但我想知道为什么该方法中的代码没有反映在主窗体上。
      • @brukekek:当你定义一个接口,然后调用实现者时,它在实现者的上下文中运行。 IE。如果你有一个带有方法“setLabel1”的接口,并且你的主窗体实现了这个接口,如果没有设置 label1,那么这是因为主窗体中的 setlabel1 中的一个错误。
      • 现在我明白了,您不能直接在 dll 中执行/更改控件的属性。您可以只操作某个属性的值并将其发送回主窗体进行处理。在主窗体中,从 dll 返回的任何值现在都可以被控件使用并像 label.visible = (return values from dll) 一样执行它。我之前所做的是在 dll 中传递控件名称并在那里更改其属性。综上所述,主窗体的所有子控件只能在其范围内执行。您可以访问它的属性,但不能在 dll 中执行它。
      猜你喜欢
      • 2012-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多