日期:2014-05-17  浏览次数:20693 次

如何对已经打开的子窗体通过方法赋值
环境:c#2008+XP Professional
前提:主窗体(MDIFrm)中通过菜单栏打开子窗体,通过工具栏控制子窗体的动作
主窗体中:通过MC_Employee的MC_Employee_Click事件打开子窗体,
  Frm_Employee newFrm = new Frm_Employee(this,"1");  
  newFrm.MdiParent = this;
  newFrm.WindowState =FormWindowState.Maximized;
  newFrm.Show(); //出现子窗体

打开后,通过工具栏中的ButtonAdd的ButtonAdd_Click事件执行子窗体的添加动作。这个分几步走:
(1)。得到当前的活动子窗体
(2)。得到系统点击的按钮的功能,比如是添加功能,或者是修改功能等。
  private void gs_toolBarbutton(string str_ButtName)
  {
  string str_ActiveFrm = this.ActiveMdiChild.Name; //获得当前活动窗口名称
   
  switch (str_ActiveFrm)
  {
  case "Frm_Employee":
  Frm_Employee frmE = new Frm_Employee(this,str_ButtName);
  frmE.gs_Control(this,str_ButtName);
  case "....."

(3)。进入子窗体的处理程序gs_Control
  public virtual void gs_Control(MainMDI from,string strControl)
  {
  switch (strControl)
  {
  case "A": //添加
  s_AddRecord(); //___________________1
  break;
  case "E": //修改
  s_EditRecord();
  break;
  case "....":
(4)。进入子窗体的相对应的方法处理子过程
  private void s_AddRecord()
  {
  //string M_strID = "";
  UserDf.Create_ID("select max(AutoID)as ID from AC_Employees", "AC_Employees", Txtform);  
  //Txt_Name.Text = "OKOKOOK";
  }
这里就出现问题了,这个方法无法对子窗体上的文本框赋值,就是直接赋值Txt_Name.Text = "OKOKOOK"也不能
程序是运行到这里是了,监视也表明是赋值了,但子窗体上的文本框就是空的,不是前景色背景色的原因。

但是我如果直接在page_Load里面调用s_AddRecord();是可以赋值的。
我也测试了如果在点击按钮的时候再跳出来这个界面,也能赋值,但现在已有的界面不会关闭,也没有赋值。

请大家帮我关闭原来的界面或者是能让我在方法里赋值都可以,最好是后者。
请达人帮忙说明一下,给出解决方案,不胜致谢。
   
 

------解决方案--------------------
参考:
1.Refresh()下是否可以,
2.另开一个线程给文本框赋值(这个肯定可以)
------解决方案--------------------
子窗体创建一个属性,通过赋值,把string当参数传递给子窗体的text
------解决方案--------------------
newFrm是你已经show出来的子窗体了,
你在第(2)步中就不应该在new一个新的子窗体了,
Frm_Employee frmE = new Frm_Employee(this,str_ButtName); 
改为下面的再试试
Frm_Employee frmE = (Frm_Employee)this.ActiveMdiChild;