Computer Wiz99 Ответов: 2

Как получить входную строку в правильном формате при textchanged?


Всем привет.

У меня есть форма, в которой есть текстовые поля. Каждое текстовое поле имеет TextChanged на нем, чтобы сделать некоторые вычисления. У меня есть валидатор регулярных выражений, чтобы проверить, вводит ли пользователь символ вместо числа. Если пользователь вводит 10525.5, он должен пересчитать его до 10,526, но я получаю эту ошибку:

Input string was not in a correct format.


Почему я получаю эту ошибку и каков наилучший способ ее исправить?

Вот мой HTML код для текстовых полей:

<pre><asp:TextBox ID="TextBox1" runat="server" Width="180px" 

                    ToolTip="IPEDS Part C, Line 01, Column 01" AutoPostBack="True" 

                    ontextchanged="TextBox1_TextChanged" ValidationGroup="Check">0</asp:TextBox>
                <asp:RegularExpressionValidator ID="RegularExpressionValidator14" 

                    runat="server" ControlToValidate="TextBox1" CssClass="style18" 

                    ErrorMessage="You Must Enter Instruction" ForeColor="Red" 

                    ValidationExpression="^[-]?\d+$." ValidationGroup="Check"></asp:RegularExpressionValidator>




Вот код C# для вычислений, а также добавления и удаления запятых:

protected void TextBox1_TextChanged(object sender, EventArgs e)
        {
            int a = Convert.ToInt32(TextBox1.Text.Replace(",", ""));
            int b = Convert.ToInt32(TextBox2.Text.Replace(",", ""));
            int c = Convert.ToInt32(TextBox3.Text.Replace(",", ""));
            int d = Convert.ToInt32(TextBox4.Text.Replace(",", ""));
            int f = Convert.ToInt32(TextBox5.Text.Replace(",", ""));
            int g = Convert.ToInt32(TextBox6.Text.Replace(",", ""));
            
            int j = Convert.ToInt32(TextBox7.Text.Replace(",", ""));
            int k = Convert.ToInt32(TextBox8.Text.Replace(",", ""));
            int l = Convert.ToInt32(TextBox9.Text.Replace(",", ""));
            int m = Convert.ToInt32(TextBox10.Text.Replace(",", ""));
            TextBox88.Text = Convert.ToString(a + b + c + d + f + g + j);
            TextBox89.Text = Convert.ToString(a + b + c + d + f + g + j + k + l + m);

            TextBox1.Text = string.Format("{0:0,0}", double.Parse(TextBox1.Text));
            TextBox2.Focus();


Ошибка источника находится по адресу:

int a = Convert.ToInt32(TextBox1.Text.Replace(",", ""));


Что я уже пробовал:

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

protected void TextBox1_TextChanged(object sender, EventArgs e)
        {
            TextBox1.Text = string.Format("{0:0,0}", double.Parse(TextBox1.Text));
            TextBox2.Focus();
        }

2 Ответов

Рейтинг:
7

Computer Wiz99

У меня есть решение!!! Я заставила его работать!!!

protected void TextBoxInstr_TextChanged(object sender, EventArgs e)
        {

            int a = Convert.ToInt32(TextBox1.Text.Replace(",", "").Replace(".", ""));
            int b = Convert.ToInt32(TextBox2.Text.Replace(",", "").Replace(".", ""));
            int c = Convert.ToInt32(TextBox3.Text.Replace(",", "").Replace(".", ""));
            int d = Convert.ToInt32(TextBox4.Text.Replace(",", "").Replace(".", ""));
            int f = Convert.ToInt32(TextBox5.Text.Replace(",", "").Replace(".", ""));
            int g = Convert.ToInt32(TextBox6.Text.Replace(",", "").Replace(".", ""));
            
            int j = Convert.ToInt32(TextBox7.Text.Replace(",", "").Replace(".", ""));
            int k = Convert.ToInt32(TextBox8.Text.Replace(",", "").Replace(".", ""));
            int l = Convert.ToInt32(TextBox9.Text.Replace(",", "").Replace(".", ""));
            int m = Convert.ToInt32(TextBox10.Text.Replace(",", "").Replace(".", ""));
            TextBox88.Text = Convert.ToString(a + b + c + d + f + g + j);
            TextBox89.Text = Convert.ToString(a + b + c + d + f + g + j + k + l + m);


            TextBox1.Text = string.Format("{0:0,0}", double.Parse(TextBox1.Text));
            TextBox2.Focus();
        }


Я добавил:
.Replace(".", "")
чтобы все расчеты и это сработало.


Richard Deeming

Это не сработает.

Если пользователь вводит "123.45", вы будете рассматривать его как "12345". Но ваш вопрос говорит, что вы хотите рассматривать его как "123".

Если пользователь введет "Бу!", вы получите исключение.

Вам захочется перейти на а double во-первых, используя двойной.Метод tryparse[^] чтобы избежать ошибок при неверном вводе. Тогда использовать Math.Round чтобы округлить значение и привести его к int.

Рейтинг:
2

F-ES Sitecore

int a = Convert.ToInt32(TextBox1.Text.Replace(",", ""));


Все Поля Textbox1.Текст.Заменить(",", "") возвращает значение не может быть преобразовано в int. Помните, что ваши валидаторы-это именно то, что они проверяют. Вы можете спросить: "является ли этот элемент управления допустимым?", это не мешает пользователю вводить недопустимые символы в это поле и не удаляет из него недопустимые символы. Он просто позволяет вам проверить, являются ли элементы управления действительными, прежде чем вы их обработаете. Поэтому в случае изменения используйте валидатор, чтобы проверить, являются ли элементы управления допустимыми, а если нет, то показать ошибку, а не запускать код.

Также используйте int.Попробуйте проанализировать, а не конвертировать.ToInt32.


Computer Wiz99

Hello F-ES Sitecore. Thanks for the info. The TextBox1.Text.Replace(",", "") code is for removing the commas that the system adds in when the when the focus is set to another textbox so the calculations will fire. What I was trying to do is to have it to where the user can not enter nothing else but numbers. It works on one textbox but I get the error I posted when the textbox that does the calculations fires. So if I enter 10500 it turns to 10,500 no problem and the calculations fire. When I enter 10500.69 it gives me the error that I posted. I trying to get it to where if the user enters a number like 10500.69 that the code will fire correctly, do the calculations and correct the number to 10,501.