Introduce Properties IdleText and IdleTextDelayTime on TextBoxBase and ComboBox
Rationale:
Usually, there are 2 types of events which are considered to be a Property Change for a Value which has been edited in a TextBox, RichTextBox or ComboBox:
- A User has edited the contents of a TextBox, and moved the focus away from that TextBox.
- A User has changed the Text (so edited or deleted just one character), and while keeping the focus in the TextBox, the Property of the value which the textbox entry represents already is considered to be a change.
In many cases, this is not sufficient:
Scneario 1: Value Change Expectations in Modern Apps:
In modern apps, a value often counts already as changed, when the user changed the context of the entry box without moving the focus to the next field. Here is a sample of an order page of a modern web app:

This behavior is becoming more and more typical for Web- or mobile apps.
Scneario 2: Avoiding performance lags
In search fields, where a large amount of data needs to be filtered based on the entry of a search/filter textbox, filtering only after a lost focus doesn't make sense, while filtering after every key stroke will cause visible lags while typing, which leads to a bad user experience.
Solution
Introducing a read-only IdleText property along with a protected virtual OnIdleTextChanged method and an IdleTextChanged event would solve these kind of requirements/problems. When the user types in a text, the IdleText property will only become updated, when there is an adjustable time-gap between two keystrokes: The changing of the text has to become idle - hence the name of the property. The default value for this gap is setup to 300ms, but can be adjusted with the IdleTextDelayTime property.
The result would look like this:
The IdleText Property, btw, is necessary, so a DataBinding can be setup on PropertyChanged, which would not be possible due to the WinForms DataBinding infrastructure with only keeping the Text property as a BindingSource to the DataSource.
This code:
Private Sub TextBox1_IdleTextChanged(sender As Object, e As EventArgs) Handles TextBox1.IdleTextChanged
Label1.Text = TextBox1.IdleText
End Sub
would have this result:

The default value for this gap is setup to 300ms
Can we improve the default value to account for machines setup for older people or people with disabilities? As far as I'm aware the configured doubleclick time is often used to derive the reaction speed of the user. Default timeouts then usually tend to be the doubleclick time multiplied with a fixed factor, e.g. see these docs. Of course there's always the API to override it manually, but it would be nice if this would be adaptive out of the box and doesn't have every application dev account for it.
For example in the linked article it says as an example for a keyboard input timeout
Incremental searching in list boxes resets after 4 times the double click time
With the default doubleclick time being 500ms this would default to 2s. To be honest that also sounds more reasonable for your usecase than 300ms, what is the rationale for wanting to make it very short?
@weltkante: Yes, I agree. We had the discussion years ago at a then customer of mine, when we were dealing with the exact same thing, and I thought 300ms was something we found out after hours of tests. But actually, after looking things up, it turned out we had several default/implementations at the end at different costumers ranging between 250 and 500ms. So, I wouldn't have any problems to go for a higher value here. In fact, very much appreciate your thoughts about this!
If you got the time, could you also quickly take a look at what I wrote here? https://github.com/dotnet/winforms/pull/4967?
Thanks!