Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在更改之前获取值_C#_Winforms_Textfield_Onchange - Fatal编程技术网

C# 在更改之前获取值

C# 在更改之前获取值,c#,winforms,textfield,onchange,C#,Winforms,Textfield,Onchange,在通过用户输入或编程方式更改值之前,我无法在文本框中获取值 我想这与\u TextChanged事件有关,但一旦执行了此操作,如何获取更改之前已经存在的旧值 例如,文本字段中有编号3。然后该数字变为4如何保存3 提前谢谢 为什么不在textchanged事件期间将文本框中的当前值保存在变量中。这样,当事件再次触发时,它就是“previous”值。您可以将textbox的值保存在某个变量中。 例如 字符串currentVal=txtName.Text 字符串currentVal可以用作文本更改事件

在通过用户输入或编程方式更改值之前,我无法在文本框中获取值

我想这与
\u TextChanged
事件有关,但一旦执行了此操作,如何获取更改之前已经存在的旧值

例如,文本字段中有编号
3
。然后该数字变为
4
如何保存
3


提前谢谢

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

您可以将textbox的值保存在某个变量中。 例如 字符串currentVal=txtName.Text


字符串currentVal可以用作文本更改事件中的上一个值。

您是否尝试过制作计时器。您将输入写入字符串的每个勾号。如果文本框的输入不等于字符串中的内容,则触发您想要执行的操作。这样,您就可以使用旧输入触发一个void

private string oldInput;

....

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

不要在
文本框中存储任何内容。仅用于显示/编辑

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
}
可能您不想在每次
文本更改后更新
。也许你会在窗体关闭、某些按钮按下等情况下执行此操作

无论如何,想法应该是清楚的:如果您需要旧值,那么将其存储在您自己的某个位置(作为变量、作为
标记、作为应用程序设置、导出等)


此外,还要注意用户将如何工作。如果
TextBox
包含
3
,则用户可以先按
4
,然后删除
3
。或者用户可能意外按下
54
。以下哪一项是旧值:
3
34
54
?简单地向你们展示,拥有旧价值观可能会带来什么样的问题。可能您不想要它,而且有更好的解决方案来解决您试图通过获取旧值来解决的问题。

在文本更改期间,您正在将当前文本保存在文本框中。这是它下一次激发时,该变量中的值是旧值。但下一次激发时,它将用新值覆盖该存储旧值。。例如,我将3存储在变量中,该变量是旧值,但一旦文本变为4,该变量的值就变为4..将永远不会是以前的值。一旦3(旧值)更改为4,存储的3将被覆盖。。因此,仍然无法访问旧值。这取决于将textbox的值赋给变量的位置。您不应该将textbox的值赋给文本更改事件中的变量。我还有什么其他方法来存储该值?目前为止的最佳答案。。我之所以需要它,是因为我试图将一个按钮从一个位置移动到另一个位置,并在按钮已经存在时交换它们。所以要做到这一点,我需要知道旧的立场以及新的立场。对此有很大困难,可能会发布另一个问题。但就这一点而言,我们可以很近距离地回答这个问题。。虽然我最后做的是使用
\u Enter
事件保存旧值;)当控件获得焦点时保存旧值是个好主意。如果您愿意,另一种方法是使用
\u Leave
\u KeyDown
(按下
回车
键)确认用户输入。否则,如果用户输入
100
,则通过使用
\u TextChanged
,您将在以下位置执行3个操作:
1
10
,最后在
100
。我认为designer的属性窗口使用了这个概念(通过
Enter
确认输入或关注焦点丢失)。如果你看我的下一个问题(更难),你就会明白为什么需要这个值。。