2 回答

TA貢獻2021條經(jīng)驗 獲得超8個贊
將反射創(chuàng)建的對象賦值給obj。然后obj.GetType().GetField("SetProgress")獲得指定字段,再賦值。
Object obj=Assembly.Load("xx").CreateInstance("xx.FrmLog ");
FieldInfo fi = obj.GetType().GetField("SetProgress");
if (fi.IsPublic == true)
{
fi.SetValue(obj, new SetDelegate(SetStatus));
}

TA貢獻1811條經(jīng)驗 獲得超5個贊
using System;
using System.Reflection;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
SetDelegate sd = null;
private void button1_Click(object sender, EventArgs e)
{
var _Assembly = Assembly.LoadFile(Application.StartupPath + "\\WindowsFormsApplication1.exe");
var _Type = _Assembly.GetType("WindowsFormsApplication1.Form2");
var _Instance = _Type.InvokeMember(string.Empty, BindingFlags.CreateInstance, null, null, null);
sd += new SetDelegate(SetStatus);
sd += new SetDelegate(SetStatus2);
var _Event = _Type.GetField("SetProgress");
_Event.SetValue(_Instance, sd); // 向事件中添加方法
_Type.InvokeMember("ShowDialog", BindingFlags.InvokeMethod, null, _Instance, null); // 顯示窗體2
}
private void SetStatus(MyProgress _MyProgress)
{
_MyProgress.iProgressValue = 3;
}
private void SetStatus2(MyProgress _MyProgress)
{
_MyProgress.iProgressValue = 42;
}
}
}
using System;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form2 : Form
{
public SetDelegate SetProgress;
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
MyProgress mp = new MyProgress();
mp.iProgressValue = 0;
SetProgress(mp);
MessageBox.Show(mp.iProgressValue.ToString());
}
}
public delegate void SetDelegate(MyProgress iProgressValue);
public class MyProgress
{
public int iProgressValue = 0;
}
}
差不多就這樣,找到form2中定義的屬性。
或者采用接口的方式,讓Form2實現(xiàn)IMyForm接口,然后獲取實例后強轉(zhuǎn)為接口對象就可以了
添加回答
舉報