我有一个asp:面板上的根和很多控件里面。 当我禁用面板时,所有的孩子都是disbled(Panel.Enabled = false)。如何禁用ASP:面板但除了选择性子控件?
但我想要其中的一些,例如超链接,即使容器被禁用也保持启用状态。
如果我不能以更聪明的方式做到这一点,我将不得不将我的面板分解成许多部分以使其工作。
编辑:
其实我在做什么是页面和形式的“UPDATE-ABLE”版的“只读”版本。
我有一个asp:面板上的根和很多控件里面。 当我禁用面板时,所有的孩子都是disbled(Panel.Enabled = false)。如何禁用ASP:面板但除了选择性子控件?
但我想要其中的一些,例如超链接,即使容器被禁用也保持启用状态。
如果我不能以更聪明的方式做到这一点,我将不得不将我的面板分解成许多部分以使其工作。
编辑:
其实我在做什么是页面和形式的“UPDATE-ABLE”版的“只读”版本。
如果要禁用最需要的控件像
DisableAllChildControls(panel); // disabled all controls within panel
//then enable those you want to keep enabled
HyperlinkControl1InPanel.Enabled=true;
HyperlinkControl2InPanel.Enabled=true;
...
void DisableAllChildControls(WebControl p)
{
foreach (WebControl c in p.Controls)
{
c.Enabled=false;
DisableAllChildControls(c); //recurse
}
}
,或者如果你只是想所有超链接启用
void DisableAllControlsButHyperlinks(WebControl p)
{
foreach (WebControl c in p.Controls)
{
c.Enabled=(c is HyperLink);
DisableAllControlsButHyperlinks(c); //recurse
}
}
好吧,如果你不想打破面板,那么你可以循环其子控件(如果没有太多)。伪代码:
foreach(var c in panel.controls)
{
if(c is not a hyperlink) c.Enabled=false;
}
很难理解什么正是你想达到的。上面的答案对我来说似乎是完全合理的。我有这种感觉,你想保持启用只是一些特定的控件,可能是一些特定的按钮和一些特定的超链接。那是对的吗??
为什么不考虑一些你不想禁用的控件(例如它们的id)的方法?你可以做到这一点通过声明表示不应该在你的页面/用户控件被禁用像
string[] controlIdsToKeepEnabled = new string[]{"buttonSubmit", "hyperlinkInfo"}
控件的ID的字符串列表则在该方法,你递归禁用所有网站的您检查是否控制该控件不在列表“controlIdsToKeepEnabled”中。
有点复杂,但可以适用于您的特殊情况。这个功能可以很好地包装在一个单独的自定义服务器控件中。
尝试了所有的决议,但它没有工作刚刚开始使用的基础知识和achived它,请参见下面的答案,可以帮助你
foreach (Control c in Panel1.Controls)
{
if (c is WebControl)
{
WebControl wc = (WebControl)c;
if (c.ID.Equals("ControlID"))
{
wc.Enabled = true;
}
else
{
wc.Enabled = false;
}
}
}
立即数控制?(喜欢的ContentPlaceHolder不能为三夏被访问)和控制启用财产是可用于网络和HTML控件只
当然,我以前做过,但这是一个烂摊子,因为我所有的控制有不同的状态,这是由另一个模块控制。 我必须编程启用/禁用所有这些,除了几个按钮。即我可以有一个“c.Enabled = A || B;” A是从B抽象出来的?另外,A和B可以在任何事件中改变。 – 2009-09-18 16:21:36
你可以传递'params control [] keepEnabled'参数,然后执行'foreach(webControl c in keepEnabled)c.Enabled = true;' – wefwfwefwe 2009-09-21 09:10:55