Visual C 2010: разрешены только числа в текстовом поле

#visual-studio-2010 #visual-c #c -cli

#visual-studio-2010 #visual-c #c -cli

Вопрос:

Я не знаком с Visual Studio, .Net и Windows в целом, но мне было поручено написать программу с Windows form. Программа в значительной степени работает сейчас, но у меня есть кое-что, что меня беспокоит.

Я написал следующую функцию, чтобы разрешить ввод только числа в TextBox :

 private: System::Void tbPDX_KeyPress(System::Object^  sender, System::Windows::Forms::KeyPressEventArgs^  e) {

    if(e->KeyChar == '.'){
        if( this->tbPDX->Text->Contains(".") amp;amp; !this->tbPDX->SelectedText->Contains(".") )
            e->Handled = true;  
    }
    // Allow negative numbers
    else if(e->KeyChar == '-'){
        if((!System::String::IsNullOrWhiteSpace(this->tbPDX->Text)) amp;amp; !(this->tbPDX->Text->IndexOf('-') == -1))
            e->Handled = true;
    }
    // Accept only digits ".", "-" and the Backspace character
    else if(!Char::IsDigit(e->KeyChar)amp;amp; e->KeyChar != 0x08){
        e->Handled = true;
    }
}
  

Это отлично работает для десятичных знаков, но не идеально для отрицательных значений. Например, я могу печатать 0-.0 . Есть ли способ проверить, что позиция вводимого символа находится в начале String^ ? Из того, что я вижу, можно увидеть строку только до ввода символа?

Комментарии:

1. Итак, ввод «-» должен быть разрешен только в том случае, если строка пуста? Я не уверен, что вижу проблему.

2. Проблема в том, что если я уже ввел, скажем 3.141592635 , я хотел бы иметь возможность вернуться к началу текстового поля и ввести - ввод -3.141592635 , вместо того, чтобы удалять все содержимое для ввода - .

3. Поэтому просто измените свойство Text, tbPDX-> Text = «-» tbPDX-> Text .

4. Правильный языковой тег для этого должен быть C / CLI

Ответ №1:

В результате небольшой настройки я использовал метод, предложенный Гансом Пассантом.

Вот моя последняя функция:

 private: System::Void tbPDX_KeyPress(System::Object^  sender, System::Windows::Forms::KeyPressEventArgs^  e) {

    if(e->KeyChar == '.'){
        if( this->tbPDX->Text->Contains(".") amp;amp; !this->tbPDX->SelectedText->Contains(".") )
            e->Handled = true;  
    }
    // Allow negative numbers
    else if(e->KeyChar == '-' amp;amp; !(this->tbPDX->Text->Contains("-"))){
        e->Handled = true;
        tbPDX->Text = "-"   tbPDX->Text;
    }
    // Accept only digits ".", "-" and the Backspace character
    else if(!Char::IsDigit(e->KeyChar)amp;amp; e->KeyChar != 0x08){
        e->Handled = true;
    }
}