我有一個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