c# - 在不触发 TextChanged 事件的情况下更改文本框文本

标签 c# textbox

我在 C# 中的应用程序有一个带有 txt_TextChanged 事件的 Textbox

private void txt_TextChanged(object sender, EventArgs e)
{
  //Do somthin
}

但是我想在不触发 txt_TextChanged 事件的情况下更改一个特定部分 txt.Text

txt.Text ="somthing" //Don't fire txt_TextChanged

我该怎么做?

最佳答案

没有直接的方法来阻止引发文本属性的事件,但是您的事件处理程序可以使用标志来确定天气或不执行任务。这可能比附加和分离事件处理程序更有效。这可以通过页面中的变量甚至专门的类包装器来完成

有一个变量:

skipTextChange = true;
txt.Text = "Something";

protected void TextChangedHandler(object sender, EventArgs e) {
  if(skipTextChange){ return; }
  /// do some stuffl
}

使用专门的事件处理程序包装器

   var eventProxy = new ConditionalEventHandler<EventArgs>(TextBox1_TextChanged);
    TextBox1.TextChanged = eventProxy.EventAction;

    eventProxy.RaiseEvents = false;
    TextBox1.Text = "test";


    public void TextBox1_TextChanged(object sender, EventArgs e) {
       // some cool stuff;
    }

    internal class ConditionalEventHadler<TEventArgs> where TEventArgs : EventArgs
{
   private Action<object,TEventArgs> handler;

    public bool RaiseEvents {get; set;}

    public ConditionalEventHadler(Action<object, TEventArgs> handler)
    {
        this.handler = handler; 
    }

    public void EventHanlder(object sender, TEventArgs e) {
      if(!RaiseEvents) { return;}
      this.handler(sender, e);
    }
}

关于c# - 在不触发 TextChanged 事件的情况下更改文本框文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27763110/

相关文章:

C# 表达式计算为命名空间

c# - Parameters.AddWithValue 不会替换我的值

vb6 - 如何检测文本框中的粘贴操作?

jquery - jquery 与 Asp.net 中的文本更改事件

c# - 我如何使用 C# 将组合框选择的值添加到 Crystal Report 文本框

c# - 使用 MVVM 选择并复制 WPF 文本框中的文本

c# - 静态变量顺序

c# - 如何使用全局 Hook 确定按下的键的主机应用程序?

c# - 我如何比较 "reference equality"的 Word Interop 对象并确定某个段落所属的集合或父对象?

c# - 在 WPF 文本框中显示 "current working directory"