我注意到当我在C#应用程序中请求Value
NumericUpDown
控件时,插入符号重置为位置0.这很烦人,因为我的应用程序定期抓取值控件,所以如果在用户输入时发生这种情况,插入符会意外移动,弄乱他们的输入。
有没有办法防止这种情况或解决方法?它似乎没有SelectionStart
属性,否则我可以让轮询过程保存插入位置,获取值,然后将其设置为一个不错的解决方法。
答案 0 :(得分:3)
我可以用小数点重现错误。在您的计时器刻度事件中(或者您提取值的任何地方),请尝试添加以下代码:
numericUpDown1.DecimalPlaces = 2;
numericUpDown1.Select(numericUpDown1.Value.ToString().Length, 0);
您无法获得SelectionStart,但如果您从当前字符串的末尾选择并将selection length
设置为0,则应将插入符号保留在正确的位置。
答案 1 :(得分:2)
干预键会弄乱文本中的键入和光标,因为获取值会影响插入位置。因此,获得textboxbase
和自己设置插入符号值的iffy解决方案。
private void numericUpDown_KeyUp(object sender, KeyEventArgs e)
{
try
{
NumericUpDown numericUpDownsender = (sender as NumericUpDown);
TextBoxBase txtBase = numericUpDownsender.Controls[1] as TextBoxBase;
int currentCaretPosition = txtBase.SelectionStart;
numericUpDownsender.DataBindings[0].WriteValue();
txtBase.SelectionStart = currentCaretPosition;
}
catch (Exception ex)
{
}
}