C# 仅用于用户输入的文本框事件

C# 仅用于用户输入的文本框事件,c#,events,textbox,C#,Events,Textbox,我有一个Textbox控件,它有时以编程方式更新,也可以由用户更新。 我如何区分这两个事件? 我希望在用户更改文本时将“Dirty”标志设置为“True”。避免以编程方式设置“Dirty”标志。禁用事件处理程序或设置一个标志,上面写着“这是代码,不是用户”try onBlur 这将捕获用户离开字段的时刻 在编辑之前,您可以将其与onFocus一起使用以保存该值。您可以使用文本框的“向下键”事件 private void textBox1_KeyDown(object sender, KeyE

我有一个Textbox控件,它有时以编程方式更新,也可以由用户更新。 我如何区分这两个事件? 我希望在用户更改文本时将“Dirty”标志设置为“True”。

避免以编程方式设置“Dirty”标志。禁用事件处理程序或设置一个标志,上面写着“这是代码,不是用户”

try onBlur

这将捕获用户离开字段的时刻


在编辑之前,您可以将其与onFocus一起使用以保存该值。您可以使用文本框的“向下键”事件

  private void textBox1_KeyDown(object sender, KeyEventArgs e)
  {
      // Insert the code you want to run when the text changes here!
  }
我的解决方案 用于打印、复制和粘贴

    private void TextChanged(object sender, EventArgs e)
    {
        if (((TextBox)sender).ContainsFocus)
        {

        }
    }

选中TextChanged事件上TextBox的Modified属性。如果为true,则更改由用户进行,否则文本将以编程方式更改

例如:

void Texbox_TextChanged(object sender, EventArgs e)
{
    if (((TextBox)sender).Modified)
        TextboxUserInput();
}

好主意,但不是100%有效。会比我的答案更“干净”如果不起作用,“干净”就毫无意义了。简单地分离处理程序对于这类事情来说是相当标准的。他不是在谈论禁用的处理程序,而是谈论额外的标志。嗯,它是一个额外的标志或一个额外的处理程序…是吗?此控件没有数据绑定…此事件对textbox有效,但我想知道其他控件(如NumericUpDown)如何…是的,此解决方案不是所有控件都最干净的。但是,numericupdown控件同时具有keydown事件和mousedown事件。我想您可以在跟踪控件的值时同时使用这两种方法。或者,每次以编程方式更改值时都可以抛出布尔标志,然后在ValueChanged事件中检查控件的布尔标志(在继续处理之前将其设置回默认值)。这当然是一个非常简单的解决方案,但可能不是最优雅的。如果用户用鼠标剪切和粘贴文本框中的数据,这是不起作用的。是的,你可能也必须使用鼠标向下。@Vinzenz这根本不是真的。刚刚用这段代码捕获了delete键(键值46)。如果控件有焦点,但文本是通过编程更改的,该怎么办?使用Textchnaged delegate进行控件联合,使用else进行编程更改在内联更改期间禁用事件处理程序是一个好主意。它还解决了用户将文本粘贴到框中可能遇到的任何问题。它工作得很好。