Пошаговое руководство. Создание текстового поля для цифровых значений
Обновлен: Ноябрь 2007
Можно создать пользовательский элемент управления, производный от TextBox, так что он будет принимать только числовой ввод. В этом примере определяется класс NumericTextBox и показывается, как разместить его в форме.
Чтобы определить класс из класса TextBox
Добавьте в проект класс NumericTextBox.
Public Class NumericTextBox Inherits TextBox Private SpaceOK As Boolean = False ' Restricts the entry of characters to digits (including hex), ' the negative sign, the e decimal point, and editing keystrokes (backspace). Protected Overrides Sub OnKeyPress(ByVal e As KeyPressEventArgs) MyBase.OnKeyPress(e) Dim numberFormatInfo As NumberFormatInfo = System.Globalization.CultureInfo.CurrentCulture.NumberFormat Dim decimalSeparator As String = numberFormatInfo.NumberDecimalSeparator Dim groupSeparator As String = numberFormatInfo.NumberGroupSeparator Dim negativeSign As String = numberFormatInfo.NegativeSign Dim keyInput As String = e.KeyChar.ToString() If [Char].IsDigit(e.KeyChar) Then ' Digits are OK ElseIf keyInput.Equals(decimalSeparator) OrElse keyInput.Equals(groupSeparator) OrElse keyInput.Equals(negativeSign) Then ' Decimal separator is OK ElseIf e.KeyChar = vbBack Then ' Backspace key is OK ' else if ((ModifierKeys & (Keys.Control | Keys.Alt)) != 0) ' { ' // Let the edit control handle control and alt key combinations ' } ElseIf Me.SpaceOK AndAlso e.KeyChar = " "c Then Else ' Consume this invalid key and beep. e.Handled = True End If End Sub Public ReadOnly Property IntValue() As Integer Get Return Int32.Parse(Me.Text) End Get End Property Public ReadOnly Property DecimalValue() As Decimal Get Return [Decimal].Parse(Me.Text) End Get End Property Public Property AllowSpace() As Boolean Get Return Me.SpaceOK End Get Set(ByVal value As Boolean) Me.SpaceOK = value End Set End Property End Class
public class NumericTextBox : TextBox { bool allowSpace = false; // Restricts the entry of characters to digits (including hex), the negative sign, // the decimal point, and editing keystrokes (backspace). protected override void OnKeyPress(KeyPressEventArgs e) { base.OnKeyPress(e); NumberFormatInfo numberFormatInfo = System.Globalization.CultureInfo.CurrentCulture.NumberFormat; string decimalSeparator = numberFormatInfo.NumberDecimalSeparator; string groupSeparator = numberFormatInfo.NumberGroupSeparator; string negativeSign = numberFormatInfo.NegativeSign; string keyInput = e.KeyChar.ToString(); if (Char.IsDigit(e.KeyChar)) { // Digits are OK } else if (keyInput.Equals(decimalSeparator) || keyInput.Equals(groupSeparator) || keyInput.Equals(negativeSign)) { // Decimal separator is OK } else if (e.KeyChar == '\b') { // Backspace key is OK } // else if ((ModifierKeys & (Keys.Control | Keys.Alt)) != 0) // { // // Let the edit control handle control and alt key combinations // } else if (this.allowSpace && e.KeyChar == ' ') { } else { // Consume this invalid key and beep e.Handled = true; // MessageBeep(); } } public int IntValue { get { return Int32.Parse(this.Text); } } public decimal DecimalValue { get { return Decimal.Parse(this.Text); } } public bool AllowSpace { set { this.allowSpace = value; } get { return this.allowSpace; } } }
Чтобы добавить в форму элемент управления NumericTextBox
Добавьте следующий код в конструктор формы или события Load.
' Create an instance of NumericTextBox. Dim NumericTextBox1 As NumericTextBox = New NumericTextBox() NumericTextBox1.Parent = Me ' Draw the bounds of the NumericTextBox. NumericTextBox1.Bounds = New Rectangle(5, 5, 150, 100)
// Create an instance of NumericTextBox. NumericTextBox numericTextBox1 = new NumericTextBox(); numericTextBox1.Parent = this; //Draw the bounds of the NumericTextBox. numericTextBox1.Bounds = new Rectangle(5, 5, 150, 100);
Добавьте компонент InputPanel в форму для пользовательского ввода в NumericTextBox. Для приложения смартфона укажите числовое значение InputMode.
Компиляция кода
Для этого примера требуются ссылки на следующие пространства имен:
См. также
Задачи
Практическое руководство. Установка режимов ввода смартфона
Практическое руководство. Использование компонента InputPanel