【发布时间】:2014-09-16 10:03:06
【问题描述】:
在通过用户输入或以编程方式更改值之前,我无法在文本框中获取值。
我认为它与_TextChanged 事件有关,但是一旦执行,我如何获得更改前已经存在的旧值?
例如数字3 在文本字段中。然后数字变为4 如何保存3?
提前致谢!
【问题讨论】:
标签: c# winforms textfield onchange
在通过用户输入或以编程方式更改值之前,我无法在文本框中获取值。
我认为它与_TextChanged 事件有关,但是一旦执行,我如何获得更改前已经存在的旧值?
例如数字3 在文本字段中。然后数字变为4 如何保存3?
提前致谢!
【问题讨论】:
标签: c# winforms textfield onchange
不要在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
}
也许您不想在每个TextChanged 之后更新value。也许你会在表单关闭、按下某个按钮等时这样做。
无论如何,想法应该很清楚:如果您需要旧值,然后将其存储在自己的某个地方(作为变量,作为Tag,作为应用程序设置,导出等)。
另外,请注意用户的工作方式。如果TextBox 包含3,则用户可以先按4,然后才能删除3。或者用户可能不小心按了54。其中哪一个将是旧值:3、34、54?只是为了向您展示,拥有旧值的概念可能会导致哪些问题。也许你不想要它,并且有更好的解决方案来解决你试图通过获取旧值来解决的问题。
【讨论】:
_Enter 事件来保存旧值;)
_Leave 和_KeyDown(按下Enter 键)来确认 用户输入。否则,如果用户输入100,那么通过使用_TextChanged,您将在以下位置执行3 个操作:1、10,最后是100。我认为设计师的属性窗口正在使用这个概念(确认Enter 的输入或焦点丢失)。
为什么不在 textchanged 事件期间将文本框中的当前值保存在变量中。这样,当事件再次触发时,它就是“上一个”值。
【讨论】:
您可以将文本框的值保存在某个变量中。 例如 字符串 currentVal = txtName.Text;
字符串 currentVal 可以用作 text_changed 事件中的先前值。
【讨论】:
您是否尝试过制作计时器。每次滴答,您都会将输入写入字符串。如果文本框的输入不等于字符串中的内容,你就会触发你想做的事情。这样您就可以使用旧输入触发 void。
private string oldInput;
....
void TimerTick(Object source, ElapsedEventArgs e)
{
if (oldInput != MyTextBox.Text) MyVoid(oldInput);
oldInput = MyTextBox.Text;
}
【讨论】: