我正在使用特定程序。它有“主窗口”(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)
}
}
我可以使用哪些代码来访问所有“添加”元素,来自其他匿名/不可访问的类别?有没有“反思”或任何解决方案?
答案 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)