c#textbox事件仅用于用户输入

kay*_*cee 7 c# events textbox

我有一个文本框控件有时会以编程方式更新,也可以由用户更新.我怎么能区分这两个事件?我想在用户更改文本时将"Dirty"标志设置为"true".

小智 10

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

例:

void Texbox_TextChanged(object sender, EventArgs e)
{
    if (((TextBox)sender).Modified)
        TextboxUserInput();
}
Run Code Online (Sandbox Code Playgroud)


Chr*_*low 8

您可以使用文本框的Key Down事件.

  private void textBox1_KeyDown(object sender, KeyEventArgs e)
  {
      // Insert the code you want to run when the text changes here!
  }
Run Code Online (Sandbox Code Playgroud)

  • 是的,这个解决方案对所有控件来说都不是最干净的.但是,numericupdown控件确实同时具有keydown事件和mousedown事件.我想你可以同时使用它们以及跟踪控件的值.或者,每次以编程方式更改值时,您总是可以抛出一个布尔标志,然后在ValueChanged事件中检查控件的布尔标志(在继续处理之前将其设置回默认值).这当然是一个非常简单的解决方案 - 也许不是最优雅的. (2认同)
  • 如果用户使用鼠标在文本框中剪切和粘贴数据,则此操作无效. (2认同)

小智 5

我的解决方案适用于类型,复制和粘贴

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

        }
    }
Run Code Online (Sandbox Code Playgroud)

  • 如果控件具有焦点但文本正在以编程方式更改,该怎么办? (4认同)