经前面一个帖子,一些朋友指点后,用下面的代码就可以动态显示一个label。
新问题:
如何在类node里完成页面page_load()中的
       this.form1.Controls.Add(N.LB);
的功能?
也就是说,在node的show()里即完全实现显示而不用在页面的事件里再来做这个动作?
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;public partial class _Default : System.Web.UI.Page
{
   public class node 
     {
       public Label LB;
       public int X, Y;
       public void show()
        {
            LB = new Label();
            LB.Visible = true;
            
            LB.Text = "ddd";
            
        }
     }
    
   protected void Page_Load(object sender, EventArgs e)
     {
        node N = new node();
        
        N.show();
        this.form1.Controls.Add(N.LB);
     }
}

解决方案 »

  1.   

    public partial class _Default : System.Web.UI.Page
    {
       public class node 
         {
           private Page _parent = null;
           public node(Page parent)
           {
               this._parent = parent;
           }       public Label LB;
           public int X, Y;
           public void show()
            {
                LB = new Label();
                LB.Visible = true;
                
                LB.Text = "ddd";            this._parent.form1.Controls.Add(this.LB);
                
            }
         }
        
       protected void Page_Load(object sender, EventArgs e)
         {
            node N = new node(this);
            
            N.show();
         }
    }
      

  2.   

    最好能够把你的node这个类做成私有类因为这段代码就是这里不会错,在别的地方可能会出错的就是因为那个"form1"
      

  3.   

    回Reeezak(坚持信念) :
    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;public partial class _Default : System.Web.UI.Page
    {
       public class node 
         {
           private Page _parent = null;
           public node(Page parent)
            {
                 this._parent = parent;
            }       public Label LB;
           public int X, Y;
           public void show()
            {
                LB = new Label();
                LB.Visible = true;
                
                LB.Text = "ddd";
                this._parent.Controls.Add(this.LB);
            }
         }
        
       protected void Page_Load(object sender, EventArgs e)
         {
            node N = new node(this);
            
            N.show();
         //   this.form1.Controls.Add(N.LB);
         }
    }这样没有错了。稍微改了一下: this._parent.Controls.Add(this.LB);没有用form1
      

  4.   

    但是如果你有javascript的话,多半就要出问题了
    因为你这样做的话,dom模型变了
      

  5.   

    回坚持信念:
    关于用javascript可能出错的问题,如果我不将
     this._parent.Controls.Add(this.LB);中的form1去掉,vs2005生成页面就报错了。
    关于动态生成控件显示的另一个问题,如何在页面上定位该控件的显示位置?
    查了Label等,没有位置属性。
      

  6.   


    不好意思
    这几天写javascript写晕了,是我的错,上面的代码是直接手写的,没有到vs2005里面编译,^_^webform跟windowsform不一样的,不会有什么location的
    你可以放一个div到页面上,控制其显示位置,然后将这个label加入到这个东西里面
    当然,你也可以用table定位或者就是直接使用gridlayout,而不用flowlayout
      

  7.   

    唉。最需要location的web页,就没有好办法来控制位置了。
    感谢坚持信念!结贴。