這是因爲不是所有的cc中的控件是TextBoxes。所以當你嘗試將它們轉換爲TextBox時,該變量爲空。當一個變量爲空時,你不能訪問該變量的任何屬性,否則你會得到一個錯誤。所以任何時候一個變量可以爲空,你必須首先測試它是否爲空。
這裏的修改,如果命令你將要用來解決您的問題:
if (tb != null && tb.ReadOnly) { tb.ReadOnly = false; }
所以我appologize,我忽略了你的文本框可以包含在其他容器控件。是的,這意味着您需要執行以下兩項操作之一:1:您可以將文本框移到GroupBox外部。哈哈。我只是在開玩笑。是的,那可以解決這個問題,但是你遇到了更糟糕的問題。正確的方法是遞歸調用您的方法,爲每個控件在其Controls
屬性中具有控件。每個控件都有這個屬性,但它看起來在非容器控件中是空的(但不爲空)。 (我今天瞭解到,每一個控件還具有以下屬性Controls
,所以我已經更新了我的代碼,以反映這一點。) 因此,對於這個真正的解決辦法,我建議一些與此類似:
private void TextBoxesReadOnlyTrue(Control.ControlCollection cc)
{
foreach (Control ctrl in cc)
{
TextBox tb = ctrl as TextBox;
if (tb != null && tb.ReadOnly)
{ tb.ReadOnly = false; continue; }
if (ctrl.Controls != null && ctrl.Controls.Count > 0)
{ TextBoxesReadOnlyTrue(ctrl.Controls); }
// this recursively calls this same method for every control ...
// that is a container control that contains more controls, ...
// such as GroupBoxes, Panels, etc.
}
}
沒有工作,那麼現在是怎麼過的!不會提示錯誤。是由於文本框放在組框中? – buddy
@buddy,是的,在GroupBox中的TextBoxes是一個額外的複雜,這會導致我原來的答案缺乏。我的錯。我已經更新了我的答案,給你2個選項來解決這個新問題。你真正需要做的就是添加兩行代碼。 :) –