首页 > 解决方案 > 检测是否没有以编程方式触发 TextChanged 事件

问题描述

我有一个TextChanged附加到 Windows 窗体中的文本框的事件。如何确保对该事件的特定调用不是以编程方式触发的,而是通过用户与 TextBox 交互来触发的?

标签: winforms

解决方案


我不确定你的问题是什么意思。我会分开我的答案。

  1. 如果您想以编程方式调用文本更改函数并且在用户交互调用或以编程方式调用时有所不同:

    假设当您以编程方式调用该函数时,您将 null 传递给发送者和事件参数

    txt_TextChanged(null,null);
    ,您可以使用此解决方案:

    private void txt_TextChanged(object sender, EventArgs e)
    {
        if(sender == null)
        {
            // triggered programmatically
        }
        else
        {
           // triggered by the user. sender object is the textbox interacted by the user
        } 
    }
    
  2. 如果您想以编程方式更改文本而不触发事件:

    this.txt.TextChanged -= new System.EventHandler(this.txt_TextChanged);
    txt.Text = "bar";
    this.txt.TextChanged += new System.EventHandler(this.txt_TextChanged);
    

推荐阅读