使用 C# 更改的文本框文本出现问题
本文关键字:文本 问题 使用 | 更新日期: 2023-09-27 18:35:42
我在使用事件处理程序textchanged方法处理文本框数组时遇到问题。文本框是通过 C# 而不是通过 ASP.NET 生成的。
下面是 C# 中的文本框代码:
int i = 1;
foreach(string a in data)
{
i++;
TextBox text = new TextBox();
text.TextChanged += new EventHandler(updateone);
text.AutoPostBack = true;
text.ID = Convert.ToString(i);
}
我尝试了Text.AutoPostBack错误和真实,我得到了相同的结果。当我更改文本框的文本时,甚至没有触及 updateone 方法。当我更改文本时文本框确实会更新网站,但代码中甚至没有触及 updateOne 方法。这是更新一个代码:
protected void updateone(object sender, EventArgs e)
{
TextBox text = (TextBox)sender;
}
感谢大家的帮助!我只是很困惑为什么这不起作用...而且我必须使用 C# 方法而不是 ASP.NET 方法。
您是否尝试过在实例成员中存储对 TextBox 的引用,以便它们不会被垃圾回收?
像这样:
List<TextBox> textBoxes = ...
//in a loop
text.ID = Convert.ToString(i);
textBoxes.Add(text);
--编辑此外,根据经验,在应用程序中放置尽可能多的日志记录。无论是NLog
,任何其他日志记录工具,甚至是简单的Console.WriteLine()
,查看您的代码实际在做什么都非常有帮助。
既然你已经确认你正在发布你的实际代码,并且似乎不明白我想说的话,让我试着在答案中解释一下。
第一个问题:您的 TextBox
es 数组不存在,另一个答案已经解决了这个问题,您显然已经修复但尚未更新问题中的代码以显示您的修复。
第二个问题:您创建的TextBox
es不会以任何方式添加到表单中。我不确定您如何在不这样做的情况下测试事件处理程序。
第三个问题:您的事件处理程序updateone
不执行任何操作。想象一下,你走进一家杂货店,拿起一个橙子,把它放回原处,然后离开。这就是事件处理程序正在执行的操作。不要只是实例化临时TextBox
然后什么都不做,而是尝试弹出一个消息框,或更改窗体上存在的另一个控件的文本。
也许这样的事情会起作用:
List<TextBox> textboxes = new List<TextBox>();
int i=1;
foreach(string a in data) // I assume data is a list or array of strings
{
// I'm not sure why you iterate over data if you don't use it at all inside the loop...
++i;
TextBox text = new TextBox();
text.TextChanged += new EventHandler(updateone);
text.AutoPostBack = true;
text.ID = Convert.ToString(i);
// Add the TextBox to form here, not sure what the call is
}
Label info = new Label;
Label.Text = "Hello!";
// Add Label to form here, again not sure what the call is
然后是事件处理程序:
protected void updateone(object sender, EventArgs e)
{
info.Text = ((TextBox)sender).Text;
}
您正在动态创建 ASP.NET 控件。这意味着它们不会在表单的回发时自动重新创建。此外,必须在Page_Init事件中创建控件,而不是在Page_Load事件中创建控件。
所以问题是,你在何时何地创建文本框。确保它们是在Page_Init阶段创建的,并且是在请求和回发中创建它们。