Читайте также: |
|
С помощью функции Shellвы можете, не выходя из проекта, запускать другие программы Windows. Например, строка
y = Shell ("C:\WINDOWS\Notepad.exe")
запускает стандартный текстовый редактор Windows - Блокнот (Notepad). В скобках вы должны указать адрес запускающего файла нужного вам приложения. Вместо адреса можно писать так называемую командную строку:
y = Shell ("C:\WINDOWS\Notepad.exe C:\Untitled.txt ")
Здесь Блокнот откроется с загруженным файлом C:\Untitled.txt.
Вы можете управлять видом окна, в котором откроется программа:
y = Shell ("C:\WINDOWS\Notepad.exe C:\Untitled.txt", vbMaximizedFocus)
Здесь окно будет развернуто на весь экран. Попробуйте другие константы: vbHide, vbNormalFocus, vbMinimizedFocus, vbNormalNoFocus, vbMinimizedNoFocus.
Обработка ошибок. Оператор On Error
Многие функции и операторы, которыми вы пользуетесь в Visual Basic, вовсе не обязаны при любых обстоятельствах успешно завершать свою работу. Например, вы запустили процедуру для чтения файла с дискеты:
Private Sub Command1_Click()
Open "a:\Файлик.txt" For Input As #1
Input #1, a
Close #1
Debug.Print a
End Sub
но забыли вставить дискету в дисковод. Оператор Open не может выполнить свою работу, Visual Basic выдает сообщение об ошибке и работа приложения прерывается. Рядовой пользователь, работающий с вашим приложением, окажется в затруднительном положении. Он совсем не обязан разбираться в английском тексте сообщения, и если он даже догадается, в чем дело, и вставит дискету, все равно приложение надо будет запускать заново, так как оно прервано. Вы, как программист, должны учитывать, что с вашим приложением будут работать рядовые пользователи, причем даже не очень квалифицированные. Поэтому при программировании вы должны предугадать все возможные неправильные действия пользователя, чтобы при таких действиях приложение не прерывалось, а выдавало вразумительное сообщение на русском языке и советы по выходу из затруднительной ситуации.
Кое-что в этом направлении мы уже делали в 5.9, предохраняя калькулятор от арифметических действий над текстом и от деления на ноль.
Самым примитивным способом защиты вышеприведенной программы будет такой:
Private Sub Command1_Click()
On Error GoTo m1
Open "a:\Файлик.txt" For Input As #1
Input #1, a
Close #1
Debug.Print a
Exit Sub
m1: MsgBox ("Ошибка при вводе файла. Возможно, в дисководе нет дискеты.")
End Sub
Пояснения: Полужирным шрифтом я выделил новые элементы по сравнению с предыдущей программой. Оператор On Error GoTo m1 переводится так: "При возникновении ошибки иди к метке m1". Оператор On Error с момента своего выполнения заставляет компьютер быть начеку, не появится ли ошибка при выполнении программы. При ее появлении сообщение Visual Basic об ошибке уже не возникает, программа не прерывается, а управление передается на метку. Поэтому мы должны ставить оператор On Error раньше, чем операторы, могущие дать ошибку (в нашем случае это Open и Input). После метки вы должны поставить операторы, объясняющие пользователю, в чем дело, и помогающие как-то исправить ситуацию. В нашем случае никаких операторов, кроме MsgBox, не нужно. Забывчивый пользователь вставляет дискету в дисковод и снова жмет кнопку Command1. Все в порядке.
Обратите внимание на оператор Exit Sub. Если бы его не было, оператор MsgBox выполнялся бы всегда, даже при нормальной работе процедуры.
Написанный нами код слишком примитивен. Во-первых, мы не можем понять, какой оператор дал ошибку - Open или Input. Во-вторых, причин ошибки может быть несколько: отсутствие дискеты в дисководе, отсутствие файла на дискете и т.п. В первом случае мы вдобавок к оператору On ErrorGoTo m1 вставляем после Open, но перед Input, операторOn Error GoTo m2. В результате ошибка в строке Input будет обрабатываться операторами, начинающимися с метки m2., а ошибка в строке Open будет продолжать обрабатываться операторами, начинающимися с метки m1.
Во втором случае к нашим услугам объект Err, свойство которого Number принимает разные значения в зависимости от характера ошибки. Мы можем, например, писать такие строки:
If Err.Number = 71 Then
MsgBox ("В дисководе нет дискеты.")
ElseIf …………
Номера и имена констант ошибок вы найдете так: Help®Contents® MSDN Library (если она у вас установлена) ®Visual Studio documentation ®Visual Basic documentation®Reference®Trappable Errors.
Дата добавления: 2015-11-16; просмотров: 51 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Глава 16. Строки, файлы, обработка ошибок | | | Глава 17. Функции. Параметры процедур и функций |