sam_matte Ответов: 1

Как сравнить и проверить текстовое поле с меткой в случае изменения текста?


У меня есть текстовое поле и ярлык, сидящие рядом друг с другом. Текстовое значение метки берется из выпадающего списка. Я должен повернуть фокус текстового поля на себя, если значение метки меньше значения текстового поля, и это продолжается до тех пор, пока не будет выбрано правильное значение.
Вы не могли бы мне помочь?

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

Это мой код:-
.файл ASPX:-
<div class="row mb10">
<asp:Label runat="server" ID="lbl_Adults" CssClass="col-lg-2 control-label" Text="Adults : " AssociatedControlID="txt_Adults"></asp:Label>
<div class="col-lg-6">
    <div class="col-lg-4" style="margin-left:-15px;">
        <asp:TextBox runat="server" ID="txt_Adults" CssClass="form-control" OnTextChanged="txt_Adults_TextChanged" AutoPostBack="true"></asp:TextBox>
        <asp:RequiredFieldValidator Font-Bold="true" ForeColor="Red" runat="server" ID="req_Adults" ControlToValidate="txt_Adults" ErrorMessage="Enter No. of Adults"></asp:RequiredFieldValidator>
    </div>
    <div class="col-lg-8" style="font-family:'Copperplate Gothic'">
    Only <asp:Label runat="server" ID="lbl_No_Of_Adults"></asp:Label> Adult(s) allowed.
    </div>
 </div>
</div>


Вот код файла. cs:-
protected void txt_Adults_TextChanged(object sender, EventArgs e)
         {
  
                 if (txt_Adults==null)
                 {
                     txt_Adults.Text = "";
                     txt_Adults.Focus();
                 }
                 else if (Convert.ToInt32(txt_Adults.Text) > Max_NoAdults)
                 {
                     txt_Adults.Text = "";
                     txt_Adults.Focus();
                 }
                 else if(Convert.ToInt32(txt_Adults.Text)<=Max_NoAdults)
                 {
                     NoAdults = Convert.ToInt32(txt_Adults.Text);
                 }
             
         }

Michael_Davies

Много проблем в вашем коде, взгляните на них;

Вы используете While в обработчике событий с потенциально бесконечным циклом.

Вы проверяете, является ли элемент управления txt_Adults нулевым или нет, так как это обработчик для элемента управления txt_Adults, вы можете смело предположить, что txt_adults существует.

Вы Обращаетесь.ToString литерал, который является строкой "0".

Вы, по-видимому, не проверяете, что txt_Adults содержит только числовые значения, и просто преобразуете их, если пользователь вводит что-либо, кроме чисел, вы получите исключение.

sam_matte

Я удалил цикл while и добавил условие в else, чтобы проверить, если

txt_Adults
несет значение меньше или равно Max_NoAdults. Литерал " 0 " был преобразован нормально.  Мой код работал гладко. Возможно, мне придется применить регулярное выражение, чтобы проверить, является ли введенная строка числом или нет. Вы можете мне помочь?

Michael_Davies

Используйте вопрос "улучшить" и покажите свой код таким, как он есть сейчас.

sam_matte

Я обновил свой код. Пожалуйста, взгляните.

Michael_Davies

txt_Adults-это элемент управления textbox, надеюсь, он не является нулевым, так как обработчик событий был запущен им, вы, вероятно, хотите проверить, что txt_Adults имеет текст, Используйте либо (txt_Adults.Текст != "") или (txt_Adults.Текст.Длина != 0).

if (txt_Adults.Text.Length != 0)
{
int32 tempValue;

	if (int32.TryParse(txt_Adults.Text, tempValue) == true)
	{
//
// tempValue now contains the integer value of the text
//
		if (tempValue > Max_NoAdults)
		{
			txt_Adults.Text = "";
			txt_Adults.Focus();
		}
		else if(tempValue <= Max_NoAdults)
		{
			NoAdults = tempValue;
		}
	}
	else
	{
		txt_Adults.Focus();
	}
}

sam_matte

Большое спасибо!!!

1 Ответов

Рейтинг:
2

Jyoti Kumari96

Текстовое поле не будет иметь значения null при использовании события text_changed.

int32? tempValue; //nullable int variable