Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使多个文本框成为只读_C#_Asp.net - Fatal编程技术网

C# 如何使多个文本框成为只读

C# 如何使多个文本框成为只读,c#,asp.net,C#,Asp.net,我在stackoverflow中搜索时得到了这个脚本 string commonTextBoxPrefix = "txt"; foreach (Control c in this.Controls) { if (c.GetType() == typeof(TextBox) && c.ID.StartsWith(commonTextBoxPrefix))

我在stackoverflow中搜索时得到了这个脚本

string commonTextBoxPrefix = "txt";
            foreach (Control c in this.Controls)
            {
                if (c.GetType() == typeof(TextBox) && 
                    c.ID.StartsWith(commonTextBoxPrefix))
                {
                    ((TextBox)c).ReadOnly = true;
                }
            }
但是当我在控件中循环时,它没有检测到任何其他控件,它只检测{System.Web.UI.LiteralControl},因此循环没有进入

if (c.GetType() == typeof(TextBox)
为什么代码不检测文本框和其他控件。 我也尝试了下面的代码

foreach (Control c in parent.Controls)
        {
            if (c.Controls.Count > 0)
            {
                ClearControls(c);
            }
            else
            {
                switch (c.GetType().ToString())
                {
                    case "System.Web.UI.WebControls.TextBox":
                        ((TextBox)c).Text = "";
                        break;
                    case "System.Web.UI.WebControls.CheckBox":
                        ((CheckBox)c).Checked = false;
                        break;
                    case "System.Web.UI.WebControls.RadioButton":
                        ((RadioButton)c).Checked = false;
                        break;
                    case "System.Web.UI.WebControls.DropDownList":
                        ((DropDownList)c).SelectedIndex = -1;
                        break;
                }
            }
        }
但是循环不允许进入条件。为什么循环不检测文本框?如何将多个文本框设置为只读?

适合我

<asp:Panel ID="Panel1" runat="server">
            <asp:TextBox ID="txt1" runat="server"></asp:TextBox>
            <asp:TextBox ID="txt2" runat="server"></asp:TextBox>
            <asp:TextBox ID="txt3" runat="server"></asp:TextBox>
</asp:Panel>

 protected void Page_Load(object sender, EventArgs e)
{
    ClearTextBoxes(Panel1);
}
protected void ClearTextBoxes(Control control)
{
    foreach (Control c in control.Controls)
    {
        if (c is TextBox && c.ID.StartsWith("txt"))
            ((TextBox)c).ReadOnly = true;
    }
}

受保护的无效页面加载(对象发送方、事件参数e)
{
ClearTextBox(面板1);
}
受保护的无效ClearTextBox(控件)
{
foreach(Control.Controls中的控件c)
{
如果(c是文本框&&c.ID.StartsWith(“txt”))
((文本框)c).ReadOnly=true;
}
}

可以将一些控件封装到其他控件中。 因此,下面是您想要的补偿方法:

void DoReadOnly(Control control)
{
    foreach (Control c in control.Controls)
    {
        if (c.Controls != null && c.Controls.Count > 0)
        {
            DoReadOnly(c);
        }
        else if (c is TextBox)
        {
            (c as TextBox).ReadOnly = true;
        }
    }
}
你应该这样称呼它:

DoReadOnly(this.Form);

希望它能帮助您。

这可能只是意味着子控件集合不包含文本框。我尝试使用
DoReadOnly(tblQuarters)
而不是
DoReadOnly(this.form)
。循环与tblQuarters表中的控件列表一起进入。谢谢。是的,这个。表单只用于页面上的整个控件搜索。
ClearTextBox(Panel1)
这通过解决问题节省了我的时间。但我用的是igofed的代码。谢谢