在更改之前获取值

时间:2014-09-16 10:03:06

标签: c# winforms textfield onchange

在通过用户输入或以编程方式更改值之前,我在文本框中获取值时遇到问题。

我认为这与_TextChanged事件有关,但一旦执行此操作,如何获取更改前已存在的旧值?

例如,数字3位于文本字段中。然后,该号码会更改为4如何保存3

提前致谢!

4 个答案:

答案 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。其中哪些值:33454?只是为了向您展示,具有旧值概念可能会产生相应的问题。也许你不想要它,并且通过获得旧的价值,你有更好的解决方案。

答案 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;
}