winforms 在值更改之前获取该值

ldxq2e6h  于 2023-10-23  发布在  其他
关注(0)|答案(4)|浏览(113)

在通过用户输入或编程方式更改值之前,我无法在文本框中获取值。
我想这与_TextChanged事件有关,但是一旦执行了这个事件,我如何获得在更改之前已经存在的旧值?
例如,数字3位于文本字段中。然后数字变为4如何保存3
提前感谢!

0sgqnhkj

0sgqnhkj1#

不要在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。其中哪些将是 * 旧 * 值:33454?只是为了向你展示,拥有“旧价值”的概念可能会带来什么问题。也许你不想要它,有更好的解决方案,你试图解决的旧价值。

tzdcorbm

tzdcorbm2#

为什么不在textchanged事件期间将文本框中的当前值保存保存在一个变量中。这样,当再次触发事件时,它就是“前一个”值。

oxiaedzo

oxiaedzo3#

你可以保存文本框的值在一些变量中。例如字符串currentVal = txtName.Text;
字符串currentVal可以用作text_changed事件中的前一个值。

iyzzxitl

iyzzxitl4#

你试过做计时器吗?每一个tick都把输入写入一个字符串。如果文本框的输入不等于字符串中的内容,则触发您想要执行的操作。这样就可以用旧的输入触发一个void。

private string oldInput;

....

void TimerTick(Object source, ElapsedEventArgs e)
{
    if (oldInput != MyTextBox.Text) MyVoid(oldInput);
    oldInput = MyTextBox.Text;
}

相关问题