如何知道以前插入到文本框是否等于实际插入

本文关键字:插入 是否 于实际 文本 何知道 | 更新日期: 2023-09-27 18:16:43

你能帮我弄清楚,如何知道如果以前的文本插入到文本框,和实际插入是相等的吗?

例如,如果我插入"word 1"到文本框,然后输入它,在我插入"word 2"之后,在这种情况下什么也没有发生,但如果我在"word 1"之后再次插入"word 1",我必须知道它。

记录和输入行比较在这种情况下没有意义,因为我并不总是将字符串保存到文本文件中,但我想知道字符串是否与实际插入和先前插入比较相同,即使行不存在于文件中。

我需要存在于两个实际插入和前一个插入之间的值,如果前一个插入等于实际插入,则显示这个事实,年值,但如果实际插入不同,则删除这个时间值。

我不知道如何正确地得到这个结果与文本框实际插入,如何知道相等的下一个和前一个插入。

我确信我的尝试是糟糕的,可能是错误的,我的问题将被评为糟糕,但无论如何:

我试图将实际字符串记录添加到索引为0的列表中,然后如果下一个实际值等于此列表中的字符串,则使字段变量值等于1并清除列表,否则清除列表和年度字段变量值。然后,如果字段变量不等于零,显示"重复先前的插入"并取消字段变量值,清除时态列表。

但似乎actStr和列表记录rpt[0]的比较,它不是以前和实际的比较,而是实际与实际的比较,所以它不能正常工作,看起来像绝对错误的方法:

 List<string> rpt = new List<string>();      
 string tempRptCheck = actStr;
 rpt.Insert(0, tempRptCheck);
 if (actStr == rpt[0])
 {
    rptVal = (rptVal = 1);
    rpt.Clear();
 }
 else
 {
    rptVal = (rptVal = 0);
    rpt.Clear();
 }
 if (rptVal > 0) 
 {
    Console.WriteLine("Repeat of previous insert");
    rptVal = (rptVal = 0);    
    rpt.Clear();
 }

再次说明:

我想在实际输入等于前一个输入的情况下得到通知,例如:

插入到文本框是一个字符串"word1",然后按回车键进行进一步处理。所以它必须被记录在列表中,如果下面的插入等于前面的插入,具有相同的"word1",通知我这个相等,从列表中删除这个字符串并将其更改为实际的"word1",如果下一次插入将再次相同,则执行相同的操作。

但如果insert为"word1",则必须记录到该列表中,如果后面的insert不等于前面的insert,则从列表中删除该字符串并将其更改为实际的"word2",以避免这种情况,如果insert为"word1",并且后面的insert为"word2"不等于前面的,则下一个insert为"word1"再次等于上一个,则不应视为重复。

所以我想只在实际和前一个插入之间得到重复通知,或者把它放在实际和下一个插入之间。

为了更清楚,我想要的正是这个逻辑,它只在控制台应用程序中与期望的结果一起工作:

static void Main(string[] args)
    {
        var words = new List<string>();
        while (true)
        {
            Console.Write("Add word: ");
            var input = Console.ReadLine();
            if (words.Contains(input))
            {
                Console.WriteLine($"{input} is already in the list!");
                continue;  
            }
            words.Clear();
            words.Add(input);
        }        
        Console.ReadLine();
    }

但它不适用于文本框,我得到了与上面的代码相同的结果:每个请求都已经存在。And while (true)在无限循环中循环,因为这里也发生了同样的事情,实际等于实际。

我也试过这种方式,传递关于重复文本到字段变量rpt的值,但它不起作用:

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;
   if (newText == OldText)
   {
      rpt = (rpt = 1);
   }
   else
   {
      rpt = (rpt = 0);
   }
}

如何知道以前插入到文本框是否等于实际插入

我用简单的代码试过了。使用文本框的_Leave事件。此外,请确保在输入新值之前清除列表。此外,我还在类级别声明了List变量:

 List<string> a = new List<string>();
private void textBox1_Leave(object sender, EventArgs e)
    {
        if(a.Contains(textBox1.Text))
        {
            MessageBox.Show("Notify");
        }
        else
        {
            a.Clear();
            a.Add(textBox1.Text);
        }
    }

您不需要List,因为您只想与最后插入的值进行比较。字符串的实例就足够了

例如,如果您的表单有三个文本框。您可以使用Leave eventandler,因为您希望仅在用户完成当前TextBox并移动到另一个TextBox时检查最后插入的文本。每次添加或删除

字符时,TextChanged都会被触发。
public class MyForm : Form
{
    private string _LastInsertedText;
    public MyForm()
    {
        thisTextBox1.Leave += TextBox_Leave;
        thisTextBox2.Leave += TextBox_Leave;
        thisTextBox3.Leave += TextBox_Leave;
    }
    private void TextBox_Leave(object sender, EventArgs e)
    {
        var textBox = (TextBox)sender;
        if(textbox.Text.Equals(_LastInsertedText))
        {
            // notify about same value
        }
        else
        {
            _LastInsertedText = textbox.Text
        }
    }
}

只有当你把焦点移到另一个控件上时它才会通知你

如果只在插入值与先前插入值相同时才通知相等,则使用TextBox.Tag属性

private void TextBox_Leave(object sender, EventArgs e)
{
    var textBox = (TextBox)sender;
    var previousText = (string)textbox.Tag;
    if(textbox.Text.Equals(previousText))
    {
        // notify about same value
    }
    else
    {
        textbox.Tag = textbox.Text
    }
}