设置权限的时候,主界面是动态加载菜单,但是主界面与别的界面之间有很多数据交流阿。我要把主界面的值传到别的窗体去,或者是别的窗体某写操作,会影响主界面的显示,该怎么做才好阿。主界面代码
//菜单的单击事件,show出来的窗体
void tsmi_Click(object sender, EventArgs e)
{
//得到当前菜单项的Tag 属性,它表示权限的ID
string gid = (sender as ToolStripMenuItem).Tag.ToString(); DataRow[] rows = table.Select("gid="+gid); //得到数据库中窗体的名称
string formName = rows[0]["formname"].ToString(); //通过反射动态实例化窗体对象
Form form = Assembly.GetExecutingAssembly().CreateInstance(formName) as Form; if (this.dgvMain.SelectedRows.Count > 0) //如果有一行被选中
{
if (MyEventShow != null) //触发事件
{
MyEventShow(GetComputerInfo()); //得到选中行的信息
}
}
form.Show();
}其中一个界面的代码 public FrmAccountComputer()
{
InitializeComponent();
FrmMain fm = new FrmMain();
fm.MyEventShow+=new FrmMain.MyDelegate(fm_MyEventShow);
}
这样子运行,MyEventShow 不触发,为null,请问有好的方法解决这个问题吗。?
//菜单的单击事件,show出来的窗体
void tsmi_Click(object sender, EventArgs e)
{
//得到当前菜单项的Tag 属性,它表示权限的ID
string gid = (sender as ToolStripMenuItem).Tag.ToString(); DataRow[] rows = table.Select("gid="+gid); //得到数据库中窗体的名称
string formName = rows[0]["formname"].ToString(); //通过反射动态实例化窗体对象
Form form = Assembly.GetExecutingAssembly().CreateInstance(formName) as Form; if (this.dgvMain.SelectedRows.Count > 0) //如果有一行被选中
{
if (MyEventShow != null) //触发事件
{
MyEventShow(GetComputerInfo()); //得到选中行的信息
}
}
form.Show();
}其中一个界面的代码 public FrmAccountComputer()
{
InitializeComponent();
FrmMain fm = new FrmMain();
fm.MyEventShow+=new FrmMain.MyDelegate(fm_MyEventShow);
}
这样子运行,MyEventShow 不触发,为null,请问有好的方法解决这个问题吗。?
FrmMain fm = new FrmMain();
fm.MyEventShow+=new FrmMain.MyDelegate(fm_MyEventShow);是重新实例化的一个新的FrmMain对象,已经不是你的主窗口那个对象了
public FrmAccountComputer(FrmMain fm)
{
InitializeComponent();
this.m_MainForm = fm;
fm.MyEventShow+=new FrmMain.MyDelegate(fm_MyEventShow);
}把已有的FrmMain实例传给FrmAccountComputer窗口类即可如果搂主的FrmAccountComputer窗口类里面还有对FrmMain 类的访问的话,就可以直接使用this.m_MainForm
public static FrmMain fm;
public FrmMain()
{
InitializeComponent();
fm = this;
}
然后在这个窗体订阅事件 public FrmAccountComputer()
{
InitializeComponent();
FrmMain.fm.MyEventShow+=new FrmMain.MyDelegate(fm_MyEventShow);
}
这样做法行吗.?
~ FrmAccountComputer()
{
FrmMain.fm.MyEventShow -= new FrmMain.MyDelegate(fm_MyEventShow);
}