【问题标题】:Getting a value before it is changed在更改之前获取值
【发布时间】:2014-09-16 10:03:06
【问题描述】:

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

我认为它与_TextChanged 事件有关,但是一旦执行,我如何获得更改前已经存在的旧值?

例如数字3 在文本字段中。然后数字变为4 如何保存3

提前致谢!

【问题讨论】:

    标签: c# winforms textfield onchange


    【解决方案1】:

    不要在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?只是为了向您展示,拥有旧值的概念可能会导致哪些问题。也许你不想要它,并且有更好的解决方案来解决你试图通过获取旧值来解决的问题。

    【讨论】:

    • 迄今为止最好的答案.. 我需要它的原因是因为我试图将一个按钮从一个位置移动到另一个位置,如果该按钮已经存在,则交换它们。所以要做到这一点,我需要知道旧职位和新职位。对此有很大困难,可能会发布另一个问题。但就这一点而言,足以回答这个问题。虽然我最终做的是使用_Enter 事件来保存旧值;)
    • 控制获得焦点时保存旧值的好主意。如果您愿意,其他想法可能是同时使用_Leave_KeyDown(按下Enter 键)来确认 用户输入。否则,如果用户输入100,那么通过使用_TextChanged,您将在以下位置执行3 个操作:110,最后是100。我认为设计师的属性窗口正在使用这个概念(确认Enter 的输入或焦点丢失)。
    • 如果你看我的下一个问题(更难)你会明白为什么需要这个值..
    【解决方案2】:

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

    【讨论】:

    • 您在文本更改期间将当前文本保存在文本框中。那是它下次触发时,该变量中的值是旧值。
    • 下次触发时,它将用新值覆盖旧值。例如,我将 3 存储在变量中,这是旧值,但是一旦文本更改为 4变量值更改为 4..
    【解决方案3】:

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

    字符串 currentVal 可以用作 text_changed 事件中的先前值。

    【讨论】:

    • 永远不会是以前的值。一旦 3(旧值)更改为 4,存储的 3 将被覆盖..因此仍然无法在其他地方访问旧值..
    • 这取决于您将文本框的值分配给变量的位置。您不应该将文本框的值分配给文本更改事件中的变量。
    • 我还有什么其他方式来存储价值?
    【解决方案4】:

    您是否尝试过制作计时器。每次滴答,您都会将输入写入字符串。如果文本框的输入不等于字符串中的内容,你就会触发你想做的事情。这样您就可以使用旧输入触发 void。

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

    【讨论】:

      猜你喜欢
      • 2011-05-03
      • 2016-05-05
      • 1970-01-01
      • 2011-07-25
      • 1970-01-01
      • 1970-01-01
      • 2018-03-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多