【问题标题】:Unable to get back textbox enable property set to true once it is set to false on textchanged event?一旦在 textchanged 事件上设置为 false,就无法恢复设置为 true 的文本框启用属性?
【发布时间】:2014-06-25 18:36:01
【问题描述】:

我有一个 Web 表单,我试图在 textchanged 事件中将文本框控件属性设置为 false。我有多个文本框,我已将它们放入面板中。现在我正在检查文本框的文本更改事件中的条件。如果条件匹配,则不会发生任何变化,但如果不匹配,我会将文本框的面板控件内的启用属性设置为 false。 这就是我正在做的-

<asp:TextBox ID="TextBox1" runat="server" Width="150px" AutoPostBack="True" 
        ontextchanged="TextBox1_TextChanged"></asp:TextBox>
<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>

我的cs代码-

protected void TextBox1_TextChanged(object sender, EventArgs e)
    {
        SqlConnection cons1 = new SqlConnection(ConfigurationManager.ConnectionStrings["constr"].ConnectionString);
        cons1.Open();
        SqlCommand scmd1 = new SqlCommand("select name from tbl_names where name='"+TextBox1.Text+"'", cons1);
        SqlDataReader sdr1 = scmd1.ExecuteReader();
        if (sdr1.HasRows)
        {
            while (sdr1.Read())
            {
                Panel1.Visible = true;
                Control ctrl = new Control();
                foreach (Control c in ctrl.Controls)
                {
                    if (c is TextBox && c.ID.StartsWith("txt"))
                        ((TextBox)c).ReadOnly = false;
                }
            }
        }
        else
        {
            Panel1.Visible = true;
            Control ctrl1 = new Control();
            foreach (Control c in ctrl1.Controls)
            {
                if (c is TextBox && c.ID.StartsWith("txt"))
                    ((TextBox)c).ReadOnly = true;
            }
        }
        cons1.Close();
    }

请指导我为什么这不起作用?

【问题讨论】:

  • 你为什么要创建一个新的空控件,然后尝试循环它的控件(这将是空的)?你调试过这个吗?

标签: c# asp.net textbox textchanged


【解决方案1】:

我认为你的

Control ctrl = new Control();
foreach (Control c in ctrl.Controls)

应该是

foreach (Control c in Panel1.Controls)

另外,您正在谈论 Enabled 属性,但您没有在代码中使用它。但从你所说的来看,如果禁用文本框,我认为不会引发 textchanged 事件。

【讨论】:

  • 仅供参考:Enabled 和 ReadOnly 属性之间存在细微差别(请参阅stackoverflow.com/a/3089258/1191903
  • 标题是“无法取回文本框启用属性”,这就是我提到它的原因。除非您将这些词写给 OP,否则我同意,差异是有意义的。
  • 是的,抱歉,意思是为了 OP - 澄清他们使用的是哪一个,因为它们是不同的属性并且不可互换。
  • 非常抱歉我试图设置只读属性。我错误地写了启用。
  • @Tarec 您好 Tarec,实际上您建议的修改有效,但我面临的一个问题是,由于我试图在文本框的文本更改事件上将控件只读属性设置为 false,在这种情况下,我尝试将文本框的输入字符串与我的数据库记录的输入字符串进行匹配,如果匹配,则 readonly 属性将为 false,如果不匹配,则为 true。当记录不匹配时,我成功地将这个只读属性设置为 true,但是下次当我尝试提供匹配的字符串时,这个只读属性没有改变。
猜你喜欢
  • 1970-01-01
  • 2022-11-14
  • 2017-03-20
  • 1970-01-01
  • 2020-04-30
  • 2021-04-14
  • 1970-01-01
  • 1970-01-01
  • 2018-08-30
相关资源
最近更新 更多