如何从WINDOW获取所有对象(从其他类添加)

时间:2017-10-27 13:27:54

标签: c# reflection

我正在使用特定程序。它有“主窗口”(a.k.a。“form”),其中另一个扩展(受保护的dll,无法访问其源代码)可以在该窗口中添加一些对象(文本,标签等)。

如何访问在“表单”中添加的所有对象?

这里是典型扩展的例子:

....
namespace ProgramName.Extensions {

    public class MyExtensionName : ProgramName.ExtensionBase{

         //here goes typical codes to add things to "form" window,like:
         Draw.Arrow(MainFormObject, ArrowColor, ArrowWidth)

    }

}

我可以使用哪些代码来访问所有“添加”元素,来自其他匿名/不可访问的类别?有没有“反思”或任何解决方案?

3 个答案:

答案 0 :(得分:2)

使用dll在表单上添加一些对象需要使用like:

的内容将表单本身引用为可访问的成员
 Assembly assembly = Assembly.LoadFile("C:\\test.dll");
Type type = assembly.GetType("test.dllTest");
Form form = (Form)Activator.CreateInstance(type);

然后添加:

form.Controls.Find();

如果是当前表单,则使用Load方法:

 private void Form_Load(object sender, EventArgs e)
    {
      this.Controls.Find("name",true)
      // OR
      foreach(Control c in this.Controls)
        if(c.Name == Name)
            //Do something...
    }

答案 1 :(得分:1)

你可以试试这个

foreach (Control ctrl in this.Controls)
{
    if (ctrl .GetType().GetProperty("Text") != null)
    {
        // code here            
    }
}

答案 2 :(得分:1)

  

受保护的dll,无法访问其源代码

  • 这些控件听起来像COM / OLE / ActiveX:
  • 您可以访问它们,只要您找到维护主表单(主机程序)的代码即可。
  • 您可以尝试搜索这些控件'项目代码中的关键字,用于查找相关代码。
  • 将这些DLL包含在项目引用中将为您提供从DLL检查关键字的机会。
  • 搜索这些DLL的用法并找到您要使用的代码位置并在那里执行操作。

如何从DLL中获取关键字的示例:

enter image description here