在通过用户输入或以编程方式更改值之前,我在文本框中获取值时遇到问题。
我认为这与_TextChanged
事件有关,但一旦执行此操作,如何获取更改前已存在的旧值?
例如,数字3
位于文本字段中。然后,该号码会更改为4
如何保存3
?
提前致谢!
答案 0 :(得分:3)
不要在TextBox
中存储任何内容。仅用它来显示/编辑value
。
private string value;
private void textBox1_TextChanged(object sender, EventArgs e)
{
// at this moment value is still old
var oldValue = value;
value = ((TextBox)sender).Text; // text1.Text
// here you have oldValue and new value
}
也许您不希望在每个value
之后更新TextChanged
。也许你会在表格关闭,按下某个按钮等时这样做。
无论如何,想法应该是明确的:如果你需要有旧值,那么自己存储(作为变量,作为Tag
,作为应用程序设置,导出等)。
另外,请注意用户的工作方式。如果TextBox
包含3
,则用户可以先按4
,然后再删除3
。或者用户可能会意外按54
。其中哪些旧值:3
,34
,54
?只是为了向您展示,具有旧值概念可能会产生相应的问题。也许你不想要它,并且通过获得旧的价值,你有更好的解决方案。
答案 1 :(得分:2)
为什么不在textchanged事件期间将文本框中的当前值保存在变量中。这样,它就是"之前的"再次触发事件时的值。
答案 2 :(得分:0)
您可以将文本框的值保存在某个变量中。 例如 string currentVal = txtName.Text;
string currentVal可以用作text_changed事件中的先前值。
答案 3 :(得分:0)
你有没有试过制作计时器?您将每个刻度写入字符串的输入。如果文本框的输入不等于字符串中的内容,则触发您想要执行的操作。这样你就可以用旧输入触发一个空白。
private string oldInput;
....
void TimerTick(Object source, ElapsedEventArgs e)
{
if (oldInput != MyTextBox.Text) MyVoid(oldInput);
oldInput = MyTextBox.Text;
}