我在 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/