NumericUpDown, похоже, имеет дело только с целыми числами. Как я могу изменить его (?), Поэтому я могу использовать удвоения в качестве значения и приращения?
Я просто использую текстовое поле, а затем переопределяю событие OnKeyPress. Этот код работал у меня в прошлом, но хорош только для групп, которые пишут 1234,56, а не 1234,56.
public partial class NumberTextBox : TextBox
{
public NumberTextBox()
{
InitializeComponent();
}
public decimal Value
{
get
{
try
{
return decimal.Parse(Text);
}
catch (Exception)
{
return -1;
}
}
}
public int ValueInt
{
get { return int.Parse(Text); }
}
protected override void OnKeyPress(KeyPressEventArgs e)
{
if (!char.IsControl(e.KeyChar)
&& !char.IsDigit(e.KeyChar)
&& e.KeyChar != '.')
{
e.Handled = true;
}
// only allow one decimal point
if (e.KeyChar == '.' && (this).Text.IndexOf('.') > -1)
{
e.Handled = true;
}
base.OnKeyPress(e);
}
public void AppendString(string value)
{
if (string.IsNullOrEmpty(value))
{
Text = string.Empty;
}
else
{
if (value == "." && Text.IndexOf('.') > -1)
return;
Text += value;
}
}
}
NumericUpDown работает с десятичными типами, но является целочисленным только на компактной основе. Это ограничение класса на CF.
Однако существует CodeProject UserControl, который обеспечивает реализацию для CF.
Мой код является всего лишь одним блочным кодом (он протестирован с Compact Framework);
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == '.')
{
if (((TextBox)sender).Text.IndexOf('.') > -1)
{
e.Handled = true;
}
else if (((TextBox)sender).Text.Length == 0)
{
e.Handled = true;
}
}
else if (!char.IsDigit(e.KeyChar))
{
e.Handled = true;
}
if (e.KeyChar == '\b') // backspace silme tuşunun çalıması için gerekli
{
e.Handled = false;
}
base.OnKeyPress(e);
}
Кстати, я ненавижу Compact Framework. Потому что он слишком ограничен! Но я должен: (
Существует свойство, называемое DecimalPlaces. Установите его в нечто большее, чем 0, и это позволит вам работать с десятичными знаками