Маска только для отрицательных чисел

Как создать маску для ввода пользователем только отрицательных значений в компоненте DevExpress/WinForms TextEdit?

Я пытаюсь сделать это, но безуспешно:

введите здесь описание изображения

Тот же вопрос, но это решение не работает

Я думаю, это ошибка.


person Vinicius Gonçalves    schedule 14.05.2016    source источник
comment
Если вы считаете, что это ошибка, вам следует обратиться в DevEx, потому что мы ничего не можем с этим поделать. Однако вы читали последующие комментарии к ответу в сообщении, на которое вы ссылались на форумах DevEx, которое также предлагает альтернативное решение, верно?   -  person Ken White    schedule 15.05.2016


Ответы (4)


Вы можете использовать тип маски RegEx: -[0-9]*[.]{0,1}[0-9-]*

введите здесь описание изображения

или вы можете обработать событие EditValueChanging следующим образом:

private void textEdit1_EditValueChanging(object sender, DevExpress.XtraEditors.Controls.ChangingEventArgs e)
{
    e.Cancel = !e.NewValue.ToString().Contains("-");
}
person Abdellah OUMGHAR    schedule 14.05.2016
comment
эта маска разрешает положительные числа. - person Vinicius Gonçalves; 15.05.2016
comment
начните маску с - как ответ. - person Abdellah OUMGHAR; 15.05.2016
comment
Я попробовал этот хак, но когда я получаю значение свойства EditValue, оно положительное, я знаю, что могу сделать еще один хак, чтобы изменить значение на отрицательное, но я не хочу этого делать. - person Vinicius Gonçalves; 15.05.2016
comment
Это решение работает, но все еще использует хак. Мне нужны автоматические разделители тысяч, когда пользователь вводит значение. Тем не менее спасибо за попытку помочь парню. - person Vinicius Gonçalves; 15.05.2016

Если вы работаете с числами, я предлагаю вам использовать SpinEdit. Чтобы разрешить прием только отрицательных чисел, используйте RepositoryItemSpinEdit.MaxValue и RepositoryItemSpinEdit.MinValue.

spinEdit1.Properties.MaxValue = -1;
spinEdit1.Properties.MinValue = decimal.MinValue;

Если вам нужен TextEdit, я предлагаю вам использовать маску Абделлы. Чтобы получить TextEdit.EditValue в виде числа, а не строки, используйте событие ParseEditValue.

textEdit1.Properties.Mask.EditMask = "-[0-9]*[.]{0,1}[0-9]*";
textEdit1.Properties.Mask.MaskType = DevExpress.XtraEditors.Mask.MaskType.RegEx;

private void textEdit1_ParseEditValue(object sender, DevExpress.XtraEditors.Controls.ConvertEditValueEventArgs e) {
    if (e.Value is string) {
        e.Value = double.Parse(e.Value.ToString());
        e.Handled = true;
    }
}
person Gosha_Fighten    schedule 15.05.2016
comment
Есть ли способ сделать это с маской на textedit? (без хаков) - person Vinicius Gonçalves; 15.05.2016
comment
В этом случае я думаю, что маска Абделлы подходит больше всего. Я изменил свой ответ, включив в него дополнительное решение. - person Gosha_Fighten; 15.05.2016

Попробуйте это решение:

В вашей форме загрузите:

TextEdit1.Properties.Mask.EditMask = "-#0.0000";
TextEdit1.Properties.Mask.MaskType = DevExpress.XtraEditors.Mask.MaskType.Numeric;
TextEdit1.Properties.Mask.UseMaskAsDisplayFormat = false;
TextEdit1.Properties.EditFormat.FormatString = "-#0.0000";

И обработайте событие "CustomDisplayText" вашего textEdit :

private void TextEdit1_CustomDisplayText(object sender, DevExpress.XtraEditors.Controls.CustomDisplayTextEventArgs e)
{
          if ((e.Value != null) && !e.Value.Equals("")) 
           {
               e.DisplayText = Convert.ToDouble(e.Value).ToString("-#0.0000");
           }       
}
person Beldi Anouar    schedule 16.05.2016

Попробуй это:

txtEdit.Properties.Mask.EditMask = "\\d-";

Какую версию DX вы используете?

person onur    schedule 25.06.2016