Preventing the
NumericUpDown control from displaying a blank value actually seems to be kind of tricky, but a little investigation showed it isn't as bad as it seems.
The biggest hurdle to accomplishing this goal is the
Text property doesn't appear in the property grid or Intellisense. This would seem to suggest that you can't directly get or set the text, which is a problem. When the control's text is blank, the internal value does not change, so it seemed there was no way to detect if the user input a blank value.
Indeed, the documentation seems to agree:
Quote:
|
The Text has no affect on the appearance of the NumericUpDown control; therefore, it is hidden in the designer and from IntelliSense.
|
Sometimes, though, it is good to follow hunches that the documentation doesn't know what it's talking about. Digging into the control's implementation proved interesting. Several methods exist to parse and validate the input text, and they were directly using the
Text property. It was only when I looked at the declaration for the property that I understood what was going on:
Code:
<Browsable(False), Bindable(False), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), EditorBrowsable(EditorBrowsableState.Never)> _
Public Overrides Property [Text] As String
The property is not inaccessible, simply hidden. Intellisense will not display the property, but using it provides the expected behavior. (So much for "having no effect"!)
This leaves you with some choices, but I think using the
Leave event is the best. If you want to force focus back into the control you can, but in that case I suggest the
Validating event. Here's an example of how you could get rid of blank entries:
Code:
Private Sub numericUpDown1_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles numericUpDown1.Leave
If String.IsNullOrEmpty(numericUpDown1.Text) Then
numericUpDown1.Text = numericUpDown1.Value.ToString()
End If
End Sub
When the user leaves the control, this replaces a blank value with the control's current value.