Изграждане на графичен потребителски интерфейс с Windows Forms



страница11/16
Дата27.09.2016
Размер1.09 Mb.
#10985
1   ...   8   9   10   11   12   13   14   15   16

Валидация на данни


Валидацията на данни е необходима, когато в дадена контрола трябва да се допуска въвеждане само на коректни данни, например цяло число, валидна дата и др. В Windows Forms има стандартни средства за вали­да­ция:

  • Validating – събитие за валидация на данните в класа Control. На събитието се подава параметър от тип CancelEventArgs. Ако на свойството Cancel на този обект се зададе стойност true, то на потребителя не се разрешава да напусне контролата.

  • ErrorProvider – отбелязва графично контроли с невалидни данни. До контролата с невалидни данни се появява икона, а когато показа­лецът на мишката застане над иконата, се появява текст с описание на грешката.

Нека разгледаме следващия фрагмент код, илюстриращ валидацията на данни:

private TextBox TextBox1;

private ErrorProvider errorProvider;

...
private void TextBox1_Validating(object sender,

System.ComponentModel.CancelEventArgs e)

{

try


{

Int32.Parse(TextBox1.Text);

errorProvider.SetError(TextBox1, "");

}

catch (FormatException)



{

errorProvider.SetError(

TextBox1, "Integer number expected!");

e.Cancel = true;

}

}


Имаме една TextBox контрола, чиито данни ще валидираме и един ErrorProvider обект, който ще използваме за да отбелязваме, че контро­лата съдържа невалидни данни.

В обработчика на събитието Validating на контролата се опитваме да конвертираме текста, съдържащ се в нея, в цяло число. Ако конвер­ти­рането пропадне, това означава, че потребителят не е въвел коректни данни. В този случай подаваме на метода SetError(…), на ErrorProvider обекта, наша­та контрола и символен низ с описание на грешката. Това описание ще се появи при задържане на мишката над иконата за грешка. Освен това задаваме на свойството Cancel на подадения CancelEventArgs обект стойност true. Това няма да позволи на потребителя да напусне контролата. Ако конвертирането успее, то потребителят е въвел коректни данни. В този случай отново извикваме метода SetError(…), но този път му подаваме като втори параметър празен низ, което предизвиква скри­ване на иконата, ако тя е била показана.


Валидация на данни – пример


Настоящият пример е малко по-сложен и илюстрира по-пълно средствата за валидация на данни в Windows Forms – събитието Validating и контро­лата ErrorProvider. Ще създадем просто приложение, състоящо се от две форми – главна форма и форма за въвеждане на ЕГН и година на ражда­не. Главната форма ще извиква формата за въвеждане на ЕГН и година на раждане и при успешно връщане от нея ще визуализира въведените данни. Във формата за въвеждане на ЕГН и година на раждане ще сигна­лизираме на потре­би­те­ля, когато той въведе некоректни данни.

Ето стъпките за изграждане на нашето приложение:



  1. Стартираме VS.NET и създаваме нов Windows Forms проект.

  2. Задаваме на главната форма име MainForm и заглавие "Main Form". Променяме и името на файла от Form1.cs на MainForm.cs. Създа­ваме и формата за въвеждане на ЕГН и година на раждане (File | Add New Item … | Windows Form). Сменяме името й на ValidationDemoForm, а това на файла й на ValidationDemoForm.cs. Задаваме на свойствата MinimizeBox и MaximizeBox стойности false, а на свойството FormBorderStyle стойност FixedDialog.

  3. В новосъздадената форма поставяме две текстови полета с имена TextBoxEGN и TextBoxYear за въвеждане на EHГ и година на раждане. Над всяко от тях поставяме по един Label с текст, указ­ващ предназ­на­че­нието на контролата. Поставяме и два бутона с имена ButtonOK и ButtonCancel за потвърждаване и отказване на формата. На свойството DialogResult на ButtonCancel задаваме стойност Cancel.

  4. Поставяме във формата един ErrorProvider с име errorProvider, който ще използваме за отбелязване на контролите с невалидни данни. Ето как изглежда на формата в този момент:



  1. Добавяме обработчик на събитието Validating на TextBoxEGN кон­тролата:

private void TextBoxEGN_Validating(object sender,

System.ComponentModel.CancelEventArgs e)

{

ValidateEGN();



}
private bool ValidateEGN()

{

if (IsEgnValid(TextBoxEGN.Text))



{

errorProvider.SetError(TextBoxEGN, "");

return true;

}

else



{

errorProvider.SetError(TextBoxEGN, "Невалидно ЕГН!");

return false;

}

}


private bool IsEgnValid(string aText)

{

if (aText.Length != 10)



{

return false;

}
for (int i=0; i

{

if (! Char.IsDigit(aText[i]))



{

return false;

}

}
return true;



}

В обработчика на събитието извикваме функцията ValidateEGN(). В нея, чрез функцията IsEgnValid(…) проверяваме дали въведеното ЕГН е ва­лид­­но. Ако е валидно, посредством ErrorProvider обекта, изтриваме мар­ке­­ра за грешка до полето за въвеждане на ЕГН и връщаме стойност true, в противен случай задаваме маркер за греш­ка на полето и връщаме стойност false. Във функцията IsEgnValid(…) проверяваме дали в полето за ЕГН са въведени десет символа и дали всеки от тях е цифра. Ако е така връщаме стойност true, в противен случай връщаме стойност false.

  1. Добавяме обработчик на събитието Validating на TextBoxYear контролата:

private void TextBoxYear_Validating(object sender,

System.ComponentModel.CancelEventArgs e)

{

ValidateYear();



}
private bool ValidateYear()

{

if (IsYearValid(TextBoxYear.Text))



{

errorProvider.SetError(TextBoxYear, "");

return true;

}

else



{

errorProvider.SetError(TextBoxYear, "Невалидна година!");

return false;

}

}


private bool IsYearValid(string aText)

{

string year = TextBoxYear.Text;



if (year.Length != 4)

{

return false;



}
for (int i=0; i

{

if (! Char.IsDigit(aText[i]))



{

return false;

}

}
return true;



}

В обработчика на събитието извикваме функцията ValidateYear(). В нея, чрез функцията IsYearValid(…) проверяваме дали въведената година е ва­лид­­на. Ако е валидна, посредством errorProvider обекта, изтриваме мар­ке­­ра за грешка до полето за въвеждане на година и връщаме стойност true, в противен случай задаваме маркер за греш­ка на полето и връщаме стойност false. Във функцията IsYearValid(…) проверяваме дали в полето за година са въведени четири символа и дали всеки от тях е цифра. Ако е така, връщаме стойност true, в противен случай връщаме стойност false.

  1. Добавяме обработчик на събитието Click на бутона ButtonOK:

private void ButtonOK_Click(object sender, System.EventArgs e)

{

if (ValidateForm())



{

DialogResult = DialogResult.OK;

}

else


{

MessageBox.Show(

"Моля въведете валидни стойности във всички полета!",

"Грешка", MessageBoxButtons.OK, MessageBoxIcon.Error);

}

}
private bool ValidateForm()



{

if (! ValidateYear())

{

return false;



}
if (! ValidateEGN())

{

return false;



}

string egn = TextBoxEGN.Text;

string year = TextBoxYear.Text;

if (egn.Substring(0,2) == year.Substring(2,2))

{

errorProvider.SetError(ButtonOK, "");



return true;

}

else



{

errorProvider.SetError(ButtonOK,

"Годината на раждане на съответства на ЕГН-то!");

return false;

}

}


При натискане на бутона проверяваме чрез функцията ValidateForm() дали данните въведени във формата са валидни. Ако са валидни, задава­ме на свойството DialogResult на формата стойност DialogResult.OK, с което връщаме управлението на извикващата форма. Ако данните са невалидни, показваме диалогова кутия с подходящо съобщение.

В метода ValidateForm() проверяваме дали въведените година и ЕГН са валидни чрез функциите ValidateYear() и ValidateEGN(). Ако проверка­та на някое от тези условия пропадне, връщаме стойност false. След това проверяваме дали първите две цифри на ЕГН-то съвпадат с последните две цифри на годината на раждане. Ако съвпадат, посред­ством ErrorProvider обекта, изтриваме мар­ке­­ра за грешка до бутона и връщаме стойност true. Ако цифрите се различават задаваме маркер за греш­ка на бутона и връщаме стой­ност false.



  1. Добавяме свойства, чрез които да извличаме въведените във фор­мата ЕГН и година на раждане:

    public string EGN

    {

    get



    {

    return TextBoxEGN.Text;

    }

    }
    public string Year



    {

    get


    {

    return TextBoxYear.Text;

    }

    }


  2. Добавяме в главната форма бутон с име ButtonShow и текст Show Form. В обработчика на събитието Click на този бутон ще извик­ваме формата за въвеждане на ЕГН и година на раждане в модален режим и при успешно връщане от нея ще визуализираме въведе­ните данни:

    private void ButtonShow_Click(object sender, System.EventArgs e)

    {

    ValidationDemoForm validationDemoForm = new



    ValidationDemoForm();

    if (validationDemoForm.ShowDialog() == DialogResult.OK)

    {

    string s = String.Format("ЕГН: {0}\nГодина: {1}",



    validationDemoForm.EGN, validationDemoForm.Year);

    MessageBox.Show(s, "Резултат");

    }

    validationDemoForm.Dispose();



    }

  3. Приложението вече е готово и можем да го стартираме и тестваме:





Сподели с приятели:
1   ...   8   9   10   11   12   13   14   15   16




©obuch.info 2024
отнасят до администрацията

    Начална страница