#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;
}
}