Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C# wait for user to finish typing in a Text Box

Tags:

c#

textbox

Is there a way in C# to wait till the user finished typing in a textbox before taking in values they have typed without hitting enter?

Revised this question a little:

Okay I have a simple calculator that multiplies by 2.

Here is what I want it to do: The user inputs a value like 1000 into a textbox and it automatically displays 2000.

Here is what happens: As soon as the user enters in 1 its multiplies by 2 and outputs 2.

like image 426
user990951 Avatar asked Nov 03 '11 20:11

user990951


People also ask

What C is used for?

C programming language is a machine-independent programming language that is mainly used to create many types of applications and operating systems such as Windows, and other complicated programs such as the Oracle database, Git, Python interpreter, and games and is considered a programming foundation in the process of ...

What is the full name of C?

In the real sense it has no meaning or full form. It was developed by Dennis Ritchie and Ken Thompson at AT&T bell Lab. First, they used to call it as B language then later they made some improvement into it and renamed it as C and its superscript as C++ which was invented by Dr. Stroustroupe.

Is C language easy?

C is a general-purpose language that most programmers learn before moving on to more complex languages. From Unix and Windows to Tic Tac Toe and Photoshop, several of the most commonly used applications today have been built on C. It is easy to learn because: A simple syntax with only 32 keywords.

Is C programming hard?

C is more difficult to learn than JavaScript, but it's a valuable skill to have because most programming languages are actually implemented in C. This is because C is a “machine-level” language. So learning it will teach you how a computer works and will actually make learning new languages in the future easier.


2 Answers

I define "finished typing" now as "user has typed something but has not typed anything after a certain time". Having that as a definition i wrote a little class that derives from TextBox to extend it by a DelayedTextChanged event. I do not ensure that is complete and bug free but it satisfied a small smoke test. Feel free to change and/or use it. I called it MyTextBox cause i could not come up with a better name right now. You may use the DelayedTextChangedTimeout property to change the wait timeout. Default is 10000ms (= 10 seconds).

public class MyTextBox : TextBox {     private Timer m_delayedTextChangedTimer;      public event EventHandler DelayedTextChanged;      public MyTextBox() : base()      {         this.DelayedTextChangedTimeout = 10 * 1000; // 10 seconds     }      protected override void Dispose(bool disposing)     {         if (m_delayedTextChangedTimer != null)         {             m_delayedTextChangedTimer.Stop();             if (disposing)                 m_delayedTextChangedTimer.Dispose();         }          base.Dispose(disposing);                 }      public int DelayedTextChangedTimeout { get; set; }      protected virtual void OnDelayedTextChanged(EventArgs e)     {         if (this.DelayedTextChanged != null)             this.DelayedTextChanged(this, e);     }      protected override void OnTextChanged(EventArgs e)     {         this.InitializeDelayedTextChangedEvent();         base.OnTextChanged(e);                 }                      private void InitializeDelayedTextChangedEvent()     {         if (m_delayedTextChangedTimer != null)             m_delayedTextChangedTimer.Stop();          if (m_delayedTextChangedTimer == null || m_delayedTextChangedTimer.Interval != this.DelayedTextChangedTimeout)         {                             m_delayedTextChangedTimer = new Timer();             m_delayedTextChangedTimer.Tick += new EventHandler(HandleDelayedTextChangedTimerTick);             m_delayedTextChangedTimer.Interval = this.DelayedTextChangedTimeout;         }          m_delayedTextChangedTimer.Start();     }      private void HandleDelayedTextChangedTimerTick(object sender, EventArgs e)     {         Timer timer = sender as Timer;         timer.Stop();          this.OnDelayedTextChanged(EventArgs.Empty);     } } 
like image 121
esskar Avatar answered Oct 01 '22 10:10

esskar


Another simple solution would be to add a timer to your form, set the Interval property to 250 and then use the timer's tick event as follows:

private void timer1_Tick(object sender, EventArgs e) {     timer1.Stop();     Calculate(); // method to calculate value }  private void txtNumber_TextChanged(object sender, EventArgs e) {     timer1.Stop();     timer1.Start(); } 
like image 35
RooiWillie Avatar answered Oct 01 '22 11:10

RooiWillie