日期:2014-05-19  浏览次数:20451 次

.net中如何调用自定义控件
在一个页面中,满足条件调用A控件,不满足则调用b控件  
请教????

------解决方案--------------------
楼主可以换个思路,满足条件调用panel1(A控件panel1内),不满足则调用b控件panel2(b控件panel2内),这样也可能实现你要的功能.
------解决方案--------------------
举个例子吧,假设连续点击按钮改变控件,双数使用TextBox,单数使用Label,大致的逻辑是:

bool Refreshed=false; //当内部状态改变,需要在Render之前重建子控件

int Times //按钮单击次数
{
get{ if(ViewState[ "times "]==null) return 0; else return (int)ViewState[ "times "];}
set{ ViewState[ "times "]=value; Refreshed=false;} //需要刷新界面
}

string EditText //最后编辑的文字
{
get{ if(ViewState[ "ed "]==null)return " "; else return (string)ViewState[ "ed "]; }
set{ ViewState[ "ed "]=value; }
}

TextBox txt; //需要多个事件共享这同一个东西,看代码

void Refresh() //动态装载子控件
{
Refreshed=true;
this.thePlaceHolder.Controls.Clear(); //动态内容在 this.thePlaceHolder 内
Control uc;
if(num %2 ==0)
{
txt=new TextBox();
uc=txt; //uc和txt指向同一个对象,uc为了其它事件共享控件,txt为了if{}结束处理
uc.TextChanged += new EventHandler(uc_changed); //理解asp.net是什么东西的关键点
}
else
uc=new Label();
uc.ID= "look ";
uc.Text=EditText; //不要担心显示TextBox时回发页面覆盖浏览器提交值,不会的覆盖的
this.thePlaceHolder.Controls.Add(uc);
}

void uc_changed(object sender,EventArgument e)
{
EditText=txt.Text; //记录浏览器提交的新值
}

void button_click(object sender,EventArgument e)
{
Times++;
}

void page_Load(object sender,EventArgument e)
{
Refresh(); //动态装载控件,不要用 if(!IsPostback) 判断。动态控件必须程序装载
}

void page_PreRender(object sender,EventArgument e)
{
if(!Refreshed) //如果没有更新 Times,就用不着刷新。
Refresh();
}


随手写的,如果有个别语法错误,自己改一下。关键是看懂流程思路就好。