NumericUpDown 似乎只处理整数。我怎样才能修改它(?),所以我可以使用双精度值和增量?
anna
问问题
3867 次
4 回答
2
NumericUpDown 适用于十进制类型,但仅在紧凑框架上为整数。这是 CF 类的限制。
但是,有一个提供 CF 实现的CodeProject UserControl 。
于 2009-08-24T20:16:59.700 回答
2
我只是使用一个文本框,然后覆盖 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;
}
}
}
于 2009-08-25T15:14:11.973 回答
0
有一个名为 DecimalPlaces 的属性。将其设置为大于 0 的值,它将允许您使用小数
于 2009-08-24T20:15:21.967 回答
0
我的代码在这里只是一个块代码(使用 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。因为太有限了!但我不得不 :(
于 2015-10-16T11:50:12.310 回答