我的主窗口代码如下:
switch (tlx.ToString())
{
case "单选":
this.Ltnum0.Text="共 "+i.ToString()+" 小题:"; test0 ufl0=(test0)this.LoadControl("test0.ascx");
ufl0.Id=sdr.GetString(0);
ufl0.Xh=this.xh.ToString();
ufl0.Jsq=i; Panel1.Controls.Add( ufl0 ); break; case "多选": this.Ltnum1.Text="共 "+i.ToString()+" 小题:"; test1 ufl1=(test1)this.LoadControl("test1.ascx");
ufl1.Id=sdr.GetString(0);
ufl1.Xh=this.xh.ToString();
ufl1.Jsq=i; Panel2.Controls.Add( ufl1 ); break;
}
我在主窗口下为何找不到test0.ascx中定义的RadioButton、CheckBox、Label等?我的代码如下:
foreach(Control ctrl in Panel1.Controls )
{
  allTextBoxValues+=ctrl.ClientID.ToString()+ctrl.GetType().ToString();
if(ctrl.GetType()==Type.GetType("Table"))
foreach(Control ctrl0 in ctrl.Controls)
{
if(ctrl0.GetType() == Type.GetType("RadioButton"))
{
//具体实现
Response.Write("<script language='JavaScript'>window.alert('"+ctrl0.GetType().oString()+"');</script>");
}
if(ctrl0.GetType() == Type.GetType("CheckBox"))
{
//具体实现
Response.Write("<script language='JavaScript'>window.alert('"+ctrl0.GetType().ToString()+"');</script>");
}
}
}
===========================================================================================================================
同样的讨论在:http://community.csdn.net/Expert/topic/5293/5293251.xml?temp=.3804895

解决方案 »

  1.   

    在你的ascx里面 添加 相应的get属性 获取
      

  2.   

    你应该在WEB控件中添加相应的public类型的属性或方法供调用,而不是直接去访问WEB控件中的控件。例如要对WEB控件中的label1赋值,可以采用:
    .ascx:
    public string LabelText
    {
        set
        {
            label1.Text = value;
        }
        get
        {
            return label1.Text;
        }
    }
    或者采用方法:
    public string GetLabelText()
    {
        return label1.Text;
    }
      

  3.   

    我在ascx中加如下代码,但在主窗口中如何调用,学生试卷RB有多个还有其它,主窗口中怎么写啊?
    public string RB(string rb,string newid)
    {
    sql=" Update jy_students_ks_"+System.DateTime.Now.Year.ToString()+System.DateTime.Now.Month.ToString()+
    " set 学生答案='"+rb.ToString()+
    "' WHERE (newid = "+newid.ToString()+") ";   OdbcConnection con=db.CreateConnection();
       con.Open();
       if(sql.ToString()!="")
       {
    if(!db.ExecuteCommand(con,sql.ToString())  )
    {
    //学生答案不能加入到数据库!
    }
       }
       con.Close();}
      

  4.   

    呵呵,你这个方法没有返回值啊,要么返回bool类型的值,要么改成一个void方法。
    public bool RB(string rb,string newid)
    {
    sql=" Update jy_students_ks_"+System.DateTime.Now.Year.ToString()+System.DateTime.Now.Month.ToString()+
    " set 学生答案='"+rb.ToString()+
    "' WHERE (newid = "+newid.ToString()+") ";   OdbcConnection con=db.CreateConnection();
       con.Open();
       if(sql.ToString()!="")
       {
    if(!db.ExecuteCommand(con,sql.ToString())  )
    {
    //学生答案不能加入到数据库!
    return false;
    }
       }
       con.Close();
       return true;
    }
    主窗口中:
    bool b = this.UCContrlName.RB("字符串1", "字符串2);
    另外没搞明白你这个函数派什么用场,你解释一下,也许我可以给你整理一下。
      

  5.   

    问题是主窗口中:
    bool b = this.UCContrlName.RB("字符串1", "字符串2);
    的UCContrlName怎么找到?ascx生成页面后,主窗口中找不到生成的控件,我用下法也报null错???
    ascx中:
    public void RB(object sender, System.EventArgs e)
    {
    RB1_CheckedChanged(sender, e);
    }
    private void RB1_CheckedChanged(object sender, System.EventArgs e)
    {
    string x1="",sql=""; if (this.RB1.Checked)
    x1="A";
    if(this.RB2.Checked)
    x1="B";
    if(this.RB3.Checked)
    x1="C";
    if(this.RB4.Checked)
    x1="D"; sql=" Update jy_students_ks_"+System.DateTime.Now.Year.ToString()+System.DateTime.Now.Month.ToString()+
    " set 学生答案='"+x1.ToString()+
    "' WHERE (newid = "+this.Tnum.Text.ToString()+") "; OdbcConnection con=db.CreateConnection();
    con.Open();
    if(sql.ToString()!="")
    {
    if(!db.ExecuteCommand(con,sql.ToString())  )
    {
    //学生成绩不能加入到数据库!
    }
    }
    con.Close();
    }窗口中调用:
    ((test0)(this.FindControl("test0"))).RB(sender,e);
    运行时报null错,"对象没有引用"
      

  6.   

    1.你在你的自定义控件中定义PUBLIC属性,将你的控件都暴露出来!!  如:
        Public Textbox xxx{
          SET{你页面上放的TEXTBOX;}
          GET {你页面上放的TEXTBOX;}
    }
      

  7.   

    我已经将他们暴露出来,我才学c#,很多问题!现在的问题是如何从www窗体中取得学生的点击情况.
    多谢帮助!!!!!!!
      

  8.   

    ascx是一个类,实例化对象后能找到
      

  9.   

    问题找到,我的代码是正确的,出错在Page_Load中用了IspostBack,去掉就正常了,谢谢各位!!!!!!!!!!