如何知道以前插入到文本框是否等于实际插入
本文关键字:插入 是否 于实际 文本 何知道 | 更新日期: 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
}
}