C# 文本框 TextChanged 延时触发
public partial class DelayTextBox : TextBox
{
#region private globals
private System.Timers.Timer DelayTimer; // used for the delay
private bool TimerElapsed = false; // if true OnTextChanged is fired.
private bool KeysPressed = false; // makes event fire immediately if it wasn't a keypress
#endregion
#region object model
// Delay property
private int delayTime = 3000;
public int DelayTime
{
get { return delayTime; }
set { delayTime = value; }
}
#endregion
#region ctor
public DelayTextBox()
{
InitializeComponent();
// Initialize Timer
DelayTimer = new System.Timers.Timer(delayTime);
DelayTimer.Elapsed += new ElapsedEventHandler(DelayTimer_Elapsed);
}
#endregion
#region event handlers
void DelayTimer_Elapsed(object sender, ElapsedEventArgs e)
{
// stop timer.
DelayTimer.Enabled = false;
// set timer elapsed to true, so the OnTextChange knows to fire
TimerElapsed = true;
// use invoke to get back on the UI thread.
this.Invoke(new DelayOverHandler(DelayOver), null);
}
#endregion
#region overrides
protected override void OnKeyPress(KeyPressEventArgs e)
{
if (!DelayTimer.Enabled)
DelayTimer.Enabled = true;
else
{
DelayTimer.Enabled = false;
DelayTimer.Enabled = true;
}
KeysPressed = true;
base.OnKeyPress(e);
}
protected override void OnTextChanged(EventArgs e)
{
// if the timer elapsed or text was changed by something besides a keystroke
// fire base.OnTextChanged
if (TimerElapsed || !KeysPressed)
{
TimerElapsed = false;
KeysPressed = false;
base.OnTextChanged(e);
}
}
#endregion
#region delegates
public delegate void DelayOverHandler();
#endregion
#region private helpers
private void DelayOver()
{
OnTextChanged(new EventArgs());
}
#endregion
}
作者:阿笨
【官方QQ一群:跟着阿笨一起玩NET(已满)】:422315558
【官方QQ二群:跟着阿笨一起玩C#(已满)】:574187616
【官方QQ三群:跟着阿笨一起玩ASP.NET(已满)】:967920586
【官方QQ四群:Asp.Net Core跨平台技术开发(可加入)】:829227829
【官方QQ五群:.NET Core跨平台开发技术(可加入)】:647639415
【网易云课堂】:https://study.163.com/provider/2544628/index.htm?share=2&shareId=2544628
【51CTO学院】:https://edu.51cto.com/sd/66c64
【微信公众号】:微信搜索:跟着阿笨一起玩NET


浙公网安备 33010602011771号