Ставим пароль на калькулятор

Ваш калькулятор стал достаточно надежен и удобен. Теперь его не стыдно показать друзьям. Ну а защищаться от врагов будем паролем.

Наша задача – сделать так, чтобы при попытке запустить калькулятор на экране появлялось приглашение ввести пароль, известный только вам. При попытке ввода неправильного пароля, программа должна заканчивать свою работу.

Поскольку приглашение на ввод пароля должно появляться раньше появления калькулятора на экране, то программируем его в процедуре Form1_Load. Предварительно выдумаем сам пароль, например, «калям».

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Dim Parol As String 'Переменная-пароль

Parol = InputBox("Введите пароль")

If Parol <> "калям" Then MsgBox("Пароль неверный!") : End

End Sub

Новый для вас оператор Endделает всего одну вещь – вызывает завершение программы.

Запустите проект и проверьте, как он работает.

То же самое можно было бы запрограммировать короче и без использования переменной:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

If InputBox("Введите пароль") <> "калям" Then MsgBox("Пароль неверный!") : End

End Sub

Вообще, переменные нужны, если необходима неоднократная обработка какой-то информации: сложение чего-то, затем сравнение этого чего-то с чем-то другим и т.д. В нашем же случае пароль нужен всего один раз, так что можно обойтись и без переменной.

Вы скажете: Кто угодно перед запуском моей программы посмотрит в ее текст и сразу же увидит пароль. Совершенно верно. Существует много способов сделать пароль в тексте программы неудобочитаемым (например, соединив его из нескольких переменных, каждая из которых – коротенькая строчка), но самый лучший способ – не показывайте посторонним текст программы, а запускайте исполняемый файл (он находится в папке BIN вашего проекта).

Усовершенствуем пароль. Вы можете использовать пароль и более тонко. Например, пусть враг запустил ваш калькулятор. Он запустился, враг ликует. Но недолго, потому что видит, что кнопки сложения и вычитания неработоспособны. Для этого в процедуре Form1_Load предусмотрите их деактивацию при помощи установки в False их свойства Enabled. Для ввода пароля вы в этом случае используете не InputBox, а дополнительное текстовое поле (TextBox1) и кнопку (Button1) с текстом ОК. Введя пароль, вы щелкаете по кнопке ОК и кнопки сложения и вычитания становятся работоспособными.

Сделаем также так, чтобы в случае ввода пароля в текстовое поле там для секретности появлялись не буквы пароля, а звездочки (как это обычно принято) или любой другой символ. В этом случае никто из-за вашей спины не сможет пароль подсмотреть. Для этого достаточно в режиме проектирования или в коде до ввода пароля установить свойство текстового поля PasswordChar, выбрав в качестве его значения любой символ (в том числе и звездочку):

Textbox1.PasswordChar= "Ж"

Вот нужные две процедуры:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

TextBox1.PasswordChar = "*"

Кл_сложения.Enabled = False

Кл_вычитания.Enabled = False

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

If TextBox1.Text = "калям" Then

Кл_сложения.Enabled = True

Кл_вычитания.Enabled = True

Else

MsgBox("Пароль неверный!")

End If

End Sub

Функция MsgBox

Простое окно MsgBox. В 3.7 я вкратце описал, как пользоваться окномMsgBox. Здесь я более подробно разберу его действие. Обеспечивает его появление на экранефункцияMsgBox. Если мы выполним оператор

MsgBox("Привет!")

то увидим на экране такое окно (Рис. 7.4).

ставим пароль на калькулятор - student2.ru

Рис. 7.4

Обратите внимание, что кнопка ОК выделена (активна). Это значит, что вместо того, чтобы щелкать по ней мышью, можно просто на клавиатуре нажать клавишу Enter – результат будет тот же.

Точно такое же окно мы увидим, если выполним оператор

y = MsgBox("Привет!")

Поскольку MsgBox, как и всякая функция, имеет значение, оно и будет присвоено переменной y. Что это за значение и зачем оно нужно, мы чуть ниже выясним.

Более сложное окно MsgBox. Рассмотрим следующее окно MsgBox (Рис. 7.5).

ставим пароль на калькулятор - student2.ru

Рис. 7.5

Оно отличается от предыдущего количеством кнопок, картинкой и текстом в заголовке. Также активна у нас кнопка No. Задается окно такой функцией MsgBox:

MsgBox ("Хотите знать, сколько будет дважды два?", MsgBoxStyle.YesNoCancel Or _

MsgBoxStyle.Information Or MsgBoxStyle.DefaultButton2, "Ответьте на вопрос")

У функции – 3 параметра, разделенные запятыми:

Первый параметр – текст сообщения «Хотите знать, сколько будет дважды два?».

Третий параметр – текст заголовка «Ответьте на вопрос». Если этот параметр вами не указан, то в заголовок выносится название вашего проекта.

Второй параметр у нас такой:

MsgBoxStyle.YesNoCancel Or MsgBoxStyle.Information Or MsgBoxStyle.DefaultButton2

Он определяет количество и названия кнопок (у нас – MsgBoxStyle.YesNoCancel), внешний вид и поведение окна (у нас – MsgBoxStyle.Information), а также то, какая кнопка из трех будет активной (у нас – MsgBoxStyle.DefaultButton2).

Вам не нужно запоминать их названий. VB сам предложит их вам на выбор во всплывающем списке, как только вы при вводе этой строки в окно кода введете запятую после первого параметра.

Составные части второго параметра отделяются друг от друга знаком логической функции Or. Не буду пояснять, почему. Составных частей может быть одна, две и больше. Они являются значениями перечисления MsgBoxStyle. Смысл трех из них ясен из таблицы:

Кнопки
OKOnly Кнопка OK
OKCancel Кнопки OK, Cancel (отменить)
YesNo Кнопки Yes, No
YesNoCancel Кнопки Yes, No, Cancel
RetryCancel Кнопки Retry (попробовать еще раз), Cancel
AbortRetryIgnore Кнопки Abort (отменить), Retry, Ignore (игнорировать)
Картинки
Critical Х– крест
Question ?– вопрос
Exclamation !– восклицание
Information i– информация
Какая кнопка активна
DefaultButton1 1-я
DefaultButton2 2-я
DefaultButton3 3-я

Есть еще несколько любопытных составных частей, на которых я не останавливаюсь.

Если второй и третий параметры функции не указаны, окно имеет такой вид, как на Рис. 7.4.

Нажимаем на разные кнопки. Мы можем, если хотим, задавать действия, которые должны выполниться при нажатии той или иной кнопки в окне MsgBox. Для этого существует перечисление MsgBoxResult. Его значения повторяют названия кнопок в окне: OK, Yes, No, Cancel, Abort, Retry, Ignore. При нажатии на кнопку функция MsgBox принимает соответствующее значение, а значит, мы можем его анализировать оператором If.

Вот пример обработки нажатия на кнопки для нашего окна:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim y = MsgBox("Хотите знать, сколько будет дважды два?", _

MsgBoxStyle.YesNoCancel Or MsgBoxStyle.Information Or MsgBoxStyle.DefaultButton2, _

"Ответьте на вопрос")

If y = MsgBoxResult.Yes Then

Debug.WriteLine("Четыре")

ElseIf y = MsgBoxResult.No Then

Debug.WriteLine("Я вижу, Вы не хотите этого знать!")

ElseIf y = MsgBoxResult.Cancel Then

Debug.WriteLine("Вы, к сожалению, отказались отвечать, нажав кнопку Cancel или крестик")

End If

End Sub

Имейте в виду, что нажатие на крестик в окне MsgBox вызывает ту же реакцию, что и нажатие кнопки Cancel.

Названия кнопок сами по себе не играют никакой роли, их действие, как вы только что убедились, полностью определяется кодом, который вы напишете в процедуре. Однако в среде пользователей и программистов уже утвердились некоторые привычки, которые вам небесполезно знать:

OK означает просто принять сообщение к сведению, Cancel – отменить намечавшееся действие, Abort – прекратить неудавшуюся попытку (например, когда ваша процедура занимается распечаткой документа на принтере и приходит сообщение «Принтер не готов»), Retry – повторить неудавшуюся попытку, Ignore – проигнорировать предупреждение и продолжать, как ни в чем не бывало, Yes-No – ответить да или нет на вопрос, содержащийся в сообщении, и предпринять соответствующие действия.

Наши рекомендации