使用 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 方法。

使用 C# 更改的文本框文本出现问题

您是否尝试过在实例成员中存储对 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阶段创建的,并且是在请求和回发中创建它们。