【问题标题】:How to get old text and changed text of textbox on TextChanged event of textbox?如何在文本框的 TextChanged 事件中获取文本框的旧文本和更改的文本?
【发布时间】:2019-09-10 00:01:02
【问题描述】:

我对 c# 还很陌生。我对相同的文本更改事件有以前的文本和文本框的新更改文本的要求。我试图获取有关 textchanged 事件的文本,但它只是新文本。我怎样才能得到以前的文本?

例如假设我的文本框中有一个文本“abc”,我通过直接粘贴文本而不是键入将其更改为“pqr”。现在在文本更改事件 txtbox.text 返回我 "pqr" 。 但我需要比较以前的和新的文本,所以我也需要“abc”。那么如何获得呢?

private void txtFinalTrans_TextChanged_1(object sender, EventArgs e)
{
    gstrOldText = txtFinalTrans.Text;              
}

【问题讨论】:

  • oldTextCount = newChangesCount - 1

标签: c# .net


【解决方案1】:

尝试创建一个全局变量并将您的文本框文本放在GotFocus 事件期间,并在TextChanged 事件期间将其用作旧文本,如下所示:

string OldText = string.Empty;
private void textBox1_GotFocus(object sender, EventArgs e)
{
   OldText = textBox1.Text;
}

private void textBox1_TextChanged(object sender, EventArgs e)
{
   string newText = textBox1.Text;
   //Compare OldText and newText here
}

希望这会有所帮助...

【讨论】:

【解决方案2】:

您需要存储旧值。例如在同一类中的字段或属性中。

private string LastFinalTrans { get; set; }

private void txtFinalTrans_TextChanged_1(object sender, EventArgs e)
{
    TextBox txt = (TextBox) sender;
    if(LastFinalTrans == txt.Text)
    {
        // ...
    }
    LastFinalTrans =  txt.Text;
}

【讨论】:

  • 我不确定这是否有效!发件人始终包含更改后的文本。
【解决方案3】:

在公共中声明 OldValue 字符串

private void textbox1_Enter(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(textbox1.Text))
            {
                OldValue = textbox1.Text.Trim();
            }

        }

在离开函数中...

private void textbox1_Leave(object sender, EventArgs e)
        {
            string Newvalue = textbox1.Text;
            //Compare Both Values 

            //OldValue and Newvalue
        }

【讨论】:

    【解决方案4】:

    冰雹,

    对于 ASP.NET,实现这一壮举的最简单方法是使用 hiddenField。有一次,我希望我可以在文本框上添加一个数据属性,并通过一点 JavaScript 将旧值放在那里,然后在后面的代码中读取该属性。但不幸的是,这不是回发系统的工作方式。

    所以,一旦用户将光标放在 TextBox 中,我们希望获取旧值并将其保存在隐藏字段中。我们通过将 TextBox 的 onfocus 属性设置为 javascript 方法的名称来完成此操作,该方法将执行保存操作。我们称这个方法为 saveOldValue。

    <asp:TextBox ID="MyTextBox" runat="server" AutoPostBack="true"   onfocus="setOldValue()" OnTextChanged="MyTextBox_TextChanged"></asp:TextBox>
    
    <asp:HiddenField ID="oldValueHiddenField" Value="" ClientIDMode="Static" runat="server" />
    

    在添加 javascript setOldValue 方法之前:为了使代码尽可能通用,我们不要让 saveOldValue 方法知道调用它的特定 TextBox 或它将保存旧值的特定 HiddenField 的任何信息。这样我们就可以将此方法与任何 TextBox 和 HiddenFields 一起使用。因此,让我们将 saveOldValue 传递给文本框的当前实例,以便它可以访问 TextBox 的属性。此外,让我们在 TextBox 上添加一个属性,该属性将保存 hiddenField 的 ID,该 ID 最终将存储旧值;让我们将此属性称为 data-hiddenField 并将其分配给 HiddenField 的 ID。

    <asp:TextBox ID="MyTextBox" runat="server" AutoPostBack="true"  data-hiddenField="oldValueHiddenField" onfocus="setOldValue(this)" OnTextChanged="MyTextBox_TextChanged"></asp:TextBox>
    
    <asp:HiddenField ID="oldValueHiddenField" Value="" ClientIDMode="Static" runat="server" />
    

    接下来,让我们在 JavaScript 中设置方法 setOldVaue:

    <script>
    
    function setOldValue(e){
    //I am using a bit of jQuery here, but feel free to go pure JS
    
            var hiddenField = $(e).attr("data-hiddenField");
            var oldValue = $(e).val();
    
            $("#"+hiddenField).val(oldValue);
    
    }
    
    </script>
    

    接下来,让我们在 TextChanged 事件 [离开文本框时触发] 的代码中获取值:

    protected void MyTextBox_TextChanged(object sender, EventArgs e)
    {
        var tb = sender as TextBox;
        var oldVaue = oldValueHiddenField.Value;
        var newValue = tb.Text;
    }
    

    希望这能增加一些价值。

    //和平

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-09
      • 2012-07-16
      相关资源
      最近更新 更多