Книги в продаже (аннотация + содержание + отрывок)

Е. Петрусос
ЭФФЕКТИВНАЯ РАБОТА: VB.NET (+CD).
Цена: 406 р.

Источник: Издательский дом 'ПИТЕР'
Разделы: .NET
Подробнее: Информация от издателя (открывается в новом окне)
Заказ: Оформление покупки (открывается в новом окне)
      Книга представляет собой идеальной пособие всем, кто хотел бы освоить интегрированную среду разработки приложений Visual Basic.NET. Автор постарался охватить все современные программные технологии разработки приложений при помощи Visual Basic и проиллюстрировать их возможности на практических примерах. В книге подробно рассмотрены основы языка VB.NET, проектирование визуального интерфейса приложений, управление файлами, обработка графической информации, технология NET.Framework, создание распределенных приложений на ASP.NET, а также использование ADO.NET для разработки Web-приложений.
     
     
     
      Содержание
      Благодарности
      Введение
      ЧАСТЬ 1. Основы
      Глава 1. Знакомство с VB .NET
      Интегрированная среда разработки
      Типы проектов
      Создание простого приложения
      Как сделать приложение более надежным
      Как сделать приложение более дружественным
      Компоненты IDE
      Меню IDE
      Окно Solution Explorer
      Окно Properties
      Окно Command
      Окно Task List
      Настройка интегрированной среды разработки
      Часто используемые свойства
      Часто используемые события
      Часто используемые методы
      Создание консольного приложения
      Резюме
      Глава 2. Проекты Visual Basic
      Разработка приложения LoanCalculator
      Работа приложения LoanCalculator
      Разработка пользовательского интерфейса
      Программирование приложения расчета по займу
      Проверка данных
      Построение приложения MathCalculator
      Разработка пользовательского интерфейса
      Программирование приложения MathCalculator
      Средства отладки
      Дополнительные средства
      Перехват ошибок
      Приложение LoanCalculator для Web
      Исполняемые файлы
      VB .NET в работе: создание программы инсталляции для Windows
      Резюме
      Глава 3. Visual Basic: описание языка
      Переменные
      Объявление переменных
      Типы переменных
      Тип данных Byte
      Переменные типа Boolean
      Строковые переменные
      Символьные переменные
      Переменные типа Date
      Идентификаторы типа данных
      Переменные типа Object
      Преобразование типов переменных
      Контроль точности при преобразовании типов
      Типы данных, определяемые пользователем
      Проверка типов переменных
      Число или строка?
      Принудительное объявление переменных
      Область видимости переменной
      Время жизни переменной
      Константы
      Массивы
      Объявление массивов
      Инициализация массивов
      Границы массива
      Многомерные массивы
      Динамические массивы
      Ключевое слово Preserve
      Массивы массивов
      Переменные как объекты
      Определение объектов
      Форматирование данных
      Коды стандартного форматирования
      Строки форматирования
      Форматирование дат
      Управление выполнением программы
      Резюме
      Глава 4. Процедуры
      Модульное программирование
      Подпрограммы
      Функции
      Вызов функций и подпрограмм
      Аргументы
      Механизм передачи параметров
      Аргументы обработчика событий
      Передача произвольного числа аргументов
      Именованные аргументы
      Пользовательские типы данных, возвращаемых функцией
      Перегрузка функций
      Резюме
      Глава 5. Работа с формами
      Внешний вид форм
      Свойства элемента управления Form
      Размещение элементов управления в форме
      Последовательность перехода посредством нажатия клавиши табуляции
      VB .NET в работе: проект Contacts
      Применение свойств Anchor и Dock
      События объекта Form
      Загрузка формы и вывод ее на экран
      Начальная форма
      Управление одной формой из другой
      Формы и диалоговые окна
      VB .NET в работе: проект MultipleForms
      Разработка меню
      Редактор меню
      Свойства объекта MenuItem
      Управление меню во время выполнения приложения
      Просмотр элементов меню
      Создание динамических форм во время выполнения приложения
      Семейство Form.Controls
      VB .NET в работе: проект DynamicForm
      Создание обработчиков событий во время выполнения приложения
      Резюме
      Глава 6. Основные элементы управления Windows
      Элемент TextBox
      Основные свойства
      Свойства для обработки текста
      Выделение текста
      Методы для работы с выделенным текстом
      Восстановление текста после редактирования
      VB .NET в работе: проект TextPad
      Перехват нажатий клавиш
      Элементы управления ListBox, CheckedListBox и ComboBox
      Основные свойства
      Семейство Items
      VB .NET в работе: проект ListDemo
      Поиск
      VB .NET в работе: проект ListBoxFind
      Элемент управления ComboBox
      Элементы управления ScrollBar и TrackBar
      Элемент управления ScrollBar
      VB .NET в работе: проект Colors
      Элемент управления TrackBar
      VB .NET в работе: проект Inches
      VB .NET в работе: проект TextMargin
      Резюме
      Глава 7. Усовершенствованные элементы управления Windows
      Стандартные диалоговые окна
      Стандартные диалоговые окна Open и Font
      Использование стандартных диалоговых элементов управления
      Диалоговое окно Color
      Диалоговое окно Font
      Диалоговые окна Open и Save As
      VB .NET в работе: методы OpenFile и SaveFile
      VB .NET в работе: выборка множества файлов
      Диалоговое окно Print
      Элемент управления RichTextBox
      VB .NET в работе: проект RTFDemo
      RTF-код
      Свойства элемента управления RichTextBox
      Методы элемента управления RichTextBox
      Дополнительные возможности форматирования
      Копирование и вставка текста
      Поиск в элементе управления RichTextBox
      Форматирование URL
      VB .NET в работе: проект RTFPad
      Резюме
      ЧАСТЬ 2. Создание собственных объектов
      Глава 8. Создание пользовательских классов
      Что такое класс
      Создание класса Minimal
      "Настоящий" класс
      Инкапсуляция и абстракция
      Наследование
      Наследование существующих классов
      Полиморфизм
      Конструкторы и деструкторы объектов
      Кто и что может наследовать
      Ключевые слова для членов производных классов
      Ключевые слова MyBase и MyClass
      Резюме
      Глава 9. Создание пользовательских элементов управления
      Разработка элементов управления Windows
      Расширение функций существующих элементов управления
      Создание элемента управления FocusedTextBox
      Создание составных элементов управления
      VB .NET в работе: элемент управления ColorEdit
      Создание элементов управления с пользовательским представлением
      VB .NET в работе: элемент управления Label3D
      Как генерируются события
      Использование пользовательского элемента управления в других проектах
      VB .NET в работе: элемент управления Alarm
      Разработка элементов управления нестандартной формы
      Рисование на стандартных элементах управления
      Формирование изображения элементов меню
      Формирование изображения элементов списка
      Использование элементов управления ActiveX
      Резюме
      Глава 10. Автоматизация приложений Microsoft Office
      Программирование Word
      Объекты, представляющие текст
      Семейство Documents и объект Document
      Проверка правописания
      Программирование Excel
      Семейство Worksheets и объект Worksheet
      Объект Range
      Использование математического аппарата Excel
      Программирование Outlook
      Извлечение информации
      Рекурсивное сканирование папки Contacts
      Резюме
      ЧАСТЬ 3. Базовые рабочие классы
      Глава 11. Хранение данных в семействах
      Дополнительные возможности массивов
      Сортировка массивов
      Поиск элементов в массивах
      Другие операции с массивами
      Ограничения массивов
      Семейство ArrayList
      Создание семейства ArrayList
      Добавление и удаление элементов
      Семейство HashTable
      VB .NET в работе: проект WordFrequencies
      Класс SortedList
      Другие семейства
      Интерфейсы IEnumerator и IComparer
      Перебор элементов семейств
      Пользовательская сортировка
      Пользовательская сортировка семейства SortedList
      Класс Serialization
      Сохранение отдельных объектов
      Сохранение семейства
      Восстановление объектов
      Резюме
      Глава 12. Работа со строками, символами и датами
      Обработка строк и символов
      Класс Char
      Класс String
      Класс StringBuilder
      VB .NET в работе: проект StringReversal
      VB .NET в работе: проект CountWords
      Обработка дат
      Класс DateTime
      Класс TimeSpan
      VB .NET в работе: фиксация времени
      Резюме
      Глава 13. Работа с файлами и папками
      Доступ к файлам и папкам
      Класс Directory
      Класс File
      Класс DirectoryInfo
      Класс FileInfo
      Класс Path
      VB .NET в работе: проект CustomExplorer
      Доступ к содержимому файлов
      Объект FileStream
      Объект StreamWriter
      Объект StreamReader
      Запись данных в файл
      Объект BinaryWriter
      Объект BinaryReader
      VB .NET в работе: проект RecordSave
      Компонент FileSystemWatcher
      Свойства
      События
      VB .NET в работе: проект FileSystemWatcher
      Резюме
      ЧАСТЬ 4. Программирование вспомогательных элементов
      Глава 14. Графика в Visual Basic
      Вывод изображений
      Объект Image
      Копирование изображений через буфер обмена
      Рисование при помощи GDI+
      Базовые графические объекты
      Рисование геометрических фигур
      Графические методы
      Градиенты
      Вырезание
      Преобразование координат
      Типы преобразования координат
      VB .NET в работе: построение графиков функций
      Растровые изображения
      Определение цветов
      Установка значений цветов
      Обработка растровых изображений
      Резюме
      Глава 15. Печать в VB .NET
      Объекты, связанные с печатью
      PrintDocument
      PrintDialog
      PageSetupDialog
      PrintPreviewDialog
      PrintPreviewControl
      Свойства принтера и страницы
      Геометрия страницы
      Примеры печати
      Печать табличных данных
      Печать простого текста
      Печать растровых изображений
      Использование элемента управления PrintPreviewControl
      Резюме
      Глава 16. Обработка ошибок и отладка
      Типы ошибок
      Ошибки времени разработки
      Ошибки времени выполнения
      Логические ошибки
      Исключения и структурированная обработка исключений
      Исследование исключения
      Как обработать это исключение
      Блок Finally
      Настройка обработки ошибок
      Создание собственных исключений
      Отладка
      Точки останова
      Пошаговое выполнение программы
      Окна Locals и Watch
      Резюме
      Глава 17. Рекурсивное программирование
      Основные понятия
      Рекурсия вокруг нас
      Простой пример
      Ошибочная рекурсия
      Рекурсивный просмотр папок
      Описание рекурсивной процедуры
      Написание реального кода
      Как работает стек
      Организация стека
      Рекурсивное программирование и стек
      Передача параметров с помощью стека
      Особые случаи, возникающие при использовании рекурсивных методов
      Программа, которая никогда не завершится
      Когда следует использовать рекурсивные методы
      Резюме
      ЧАСТЬ 5. Программирование баз данных в VB .NET
      Глава 18. Базы данных: архитектура и концепции
      Что такое база данных
      Реляционные базы данных
      База данных Northwind
      Понятие отношений
      Server Explorer
      Работа с таблицами
      Отношения, индексы и ограничения
      Structured Query Language
      Выполнение SQL-инструкций
      Запросы на выборку
      Вычисляемые поля
      Объединения SQL
      Запросы на обновление
      Query Builder
      Интерфейс Query Builder
      SQL в работе: вычисление сумм
      SQL в работе: подсчет строк
      Отбор строк
      Запросы с параметрами
      Вычисляемые столбцы
      Определение левого, правого и внутреннего объединений
      Хранимые процедуры
      Резюме
      Глава 19. Разработка приложений баз данных с помощью ADO .NET
      Архитектура ADO .NET
      А что же XML?
      Создание объекта DataSet
      Элемент управления DataGrid
      Вывод связанных таблиц
      Связывание данных
      VB .NET в работе: проект ViewEditCustomers
      Связывание сложных элементов управления
      Программное управление объектом DataAdapter
      Объект Command
      Объекты Command и DataReader
      VB .NET в работе: проект DataReader
      VB .NET в работе: проект StoredProcedure
      Резюме
      Глава 20. Программирование объектов ADO .NET
      Структура объекта DataSet
      Навигация по таблицам объекта DataSet
      Обновление объекта DataSet
      Мастер DataForm
      Работа с полями типа Identity
      Транзакции
      Обновление данных
      Версии данных объекта DataRow
      Состояния объекта DataRow
      Обновление таблиц вручную
      Создание и использование пользовательских объектов DataSet
      Резюме
      Алфавитный указатель
     
     
     
     
     
      ОТРЫВОК
     
     
     
      Проекты Visual Basic
      В предыдущей главе были рассмотрены средства разработки Visual Studio .NET, основные элементы управления и принципы событийного программирования. В этой главе мы продолжим изучение средств разработки, построив несколько новых приложений с помощью Visual Basic.
      Наша цель - на примере простых приложений научить вас использовать основные конструкции языка. И хотя программные коды этих приложений несложны, они демонстрируют способы создания пользовательского интерфейса, методы проверки данных и обработки ошибок.
      Начинающий программист скажет, что сначала следует написать простое, но работающее приложение, а проверку данных можно оставить на потом. Однако продумать способ проверки данных и обработки ошибок программного кода никогда не рано. Для безотказной работы приложения в него необходимо ввести дополнительный программный код, помимо фактически используемого. Правильно сконструированное приложение обнаруживает и обрабатывает все ошибки, в том числе и ошибки пользователя. В настоящей главе рассмотрены основные принципы обработки ошибок (error handling), примен
      яемые в простейших приложениях.
      Разработка приложения LoanCalculator
      Простое и практичное приложение LoanCalculator предназначено для расчета параметров займа. Разработка этого приложения состоит из следующих этапов:
      1. Принятие решения о том, что именно должно делать приложение и как оно будет взаимодействовать с пользователем.
      2. Разработка пользовательского интерфейса.
      3. Написание программного кода.
      Работа приложения LoanCalculator
      На первом этапе примем решение: пользователь должен иметь возможность указывать сумму займа, процент по нему и срок займа (в месяцах). Для ввода этих значений необходимо предусмотреть в приложении три поля.
      Следует каким-то образом указать, вносится платеж в начале или в конце месяца. Ввод информации типа Yes/No или True/False удобно осуществлять путем использования элемента CheckBox, работающего как переключатель. Его установка и сброс происходят в результате щелчка кнопкой мыши. Вводить данные в этот элемент не нужно (установка флажка - простейший способ задания одного из двух возможных значений). На рис. 2.1 показано окно пользовательского интерфейса, соответствующее предъявляемым требованиям. Представленная форма является главной формой проекта LoanCalculator, который хранится в папке настоящей главы на компакт-диске.
      После ввода информации в форму щелкните на кнопке Show Payment. Приложение рассчитает месячные платежи и отобразит их в тестовом поле формы. Все действия выполняются подпрограммой обработки события Click кнопки. Функцию расчета месячных платежей именуют Pmt(). Она вызывается так:
      MonthlyPayment = Pmt(InterestRate, Periods, Amount, _
      FutureValue, Due)
      Процент по займу (переменная InterestRate) указывается помесячно. Если процент составляет 16,5, то значение переменной равно 0,165/12. Срок займа в месяцах задается переменной Periods, а сумма займа - переменной Amount. Значение переменной FutureValue (будущее значение займа) равняется 0 (при инвестициях это положительное значение). Последний параметр, Due, указывает срок выплаты. Если он равен 0, платежи поступают в начале месяца, если 1 - в конце.
      Значением Due может быть одна из констант - DueDate.BegOfPeriod либо DueDate.EndOfPeriod. Упомянутые константы являются встроенными, ими можно пользоваться, даже не зная их точного значения. В этом и заключается особенность применения именованных констант: достаточно задать только имя константы, и VB сам установит для нее нужное числовое значение. Позже вы увидите, что .NET использует различные константы, которые объединены в группы, называемые перечислениями. Константы, которые применяются в качестве аргумента Due функции Pmt(), принадлежат перечислению DueDate, состоящему из двух
      элементов - BegOfPeriod и EndOfPeriod.
      Текущее значение займа равно отрицательному значению суммы займа. Это обусловлено тем, что в настоящий момент вы еще не получили деньги, а только собираетесь их занять, так что они пока принадлежат банку. Конечное значение займа равно нулю и отображает стоимость займа после его погашения, то есть сумму, которую вы должны банку (или банк вам) по окончании указанного периода.
      Pmt() - это встроенная функция, рассчитывающая месячные платежи на основе пяти значений, указанных в скобках. Значения, передаваемые функции, называют аргументами. Они необходимы функции (процедуре или подпрограмме) для выполнения действий, например, проведения расчетов. Передавая функции разные значения, можно рассчитать параметры различных займов. Функция Pmt() и другие финансовые функции Visual Basic описаны в Приложении А "Встроенные функции" прилагаемого компакт-диска.
      Чтобы использовать функцию Pmt(), не нужно знать, как она выполняет расчет платежей. Достаточно того, что она сообщает результат. Для расчета месячных платежей по займу в 25000$ под 14,5% на 48 месяцев при выплатах в последний день месяца можно использовать функцию Pmt():
      Console.WriteLine(Pmt(0.145 / 12, 48, -25000, 0, DueDate.EndOfPeriod))
      Тогда в окне проверки отобразится значение 689,448821287218 (ниже показано, как ограничить число десятичных знаков двумя - для расчета денежных сумм этого достаточно). Обратите внимание на знак "минус" перед значением суммы. Если его не ввести, результат будет отрицательным. Противоположные знаки значений платежа и займа указывают на противоположные направления денежных потоков. Последние два аргумента функции Pmt() являются необязательными. Если их опустить, то они будут равны нулю. В таком случае вызов функции Pmt() имеет вид
      Console.WriteLine(Pmt(0.145 / 12, 48, -25000))
      Расчет суммы месячных платежей, заданных параметрами займа, достаточно прост. Все, что нужно знать и понимать - это параметры займа и метод их передачи функции Pmt(). Также необходимо иметь представление о том, как указать процент по займу, чтобы избежать неверных значений. А вот как выполняются расчеты, знать необязательно - Visual Basic выполнит эту работу сам.
      Разработка пользовательского интерфейса
      После ознакомления с методами расчета месячных платежей можно приступать к разработке пользовательского интерфейса. Для этого создайте новый проект, назовите его LoanCalculator (что значит расчеты по займу), а входящую в него форму - LoanForm. Форму и файлы проекта вы найдете на прилагаемом компакт-диске в папке данной главы.
      Выберите шрифт и его размер для текста элементов формы. Хотя мы не собираемся ничего отображать в форме, все ее элементы будут использовать тот же шрифт, что и сама форма. В данном случае форма - это контейнер для элементов. В дальнейшем шрифт элементов можно будет изменить, но разумнее выбрать подходящий шрифт сразу. Не выравнивайте элементы, если планируете изменять их шрифты - замена шрифта нарушит выравнивание.
      В приложении расчетов по займу, входящем в компакт-диск, используется шрифт Verdana размером 10 пунктов. Чтобы заменить его, выберите форму с помощью мыши и выполните двойной щелчок на имени свойства Font в окне свойств. Отобразится диалоговое окно Font, в котором можно задать шрифт и его атрибуты.
      Рассмотрим конструирование формы (рис. 2.1).
      1. Разместите в форме четыре надписи (элемента Label) и установите следующие значения их свойств Text.
     
      Элемент управления Значение свойства Text
      Label1 Loan Amount (Сумма займа)
      Label2 Duration (months) (Срок в месяцах)
      Label3 Interest Rate (Процент по займу)
      Label4 Monthly Payment (Месячная плата)
      Размер надписей должен быть таким, чтобы поместился весь текст. Изменять стандартные имена элементов Label нет необходимости, поскольку для пользователя будет достаточно отображаемого на них текста, а снабжать эти элементы кодом мы не будем.
      2. Возле каждого элемента Label расположите элемент TextBox. Присвойте значения их свойствам Name и Text так, как показано в таблице.
     
      Элемент управления Значение свойства Name Значение свойства Text
      TextBox1 txtAmount 25000
      TextBox2 txtDuration 48
      TextBox3 txtRate 14,5
      TextBox4 txt Payment
      3. В четвертом элементе TextBox4 будет храниться значение месячной платы. Чтобы пользователь не смог вводить никаких данных в этот элемент, нужно присвоить его свойству ReadOnly значение True. В отличие от пользователей вы должны иметь возможность изменять значение этого свойства в коде. (Мы, конечно, могли задействовать элемент Label, но применение TextBox является более предпочтительным.)
      4. Далее поместите в форму элемент CheckBox. По умолчанию значение свойства Text этого элемента - CheckBox1. Оно отображается справа от флажка. Поскольку мы хотим поместить все надписи слева, стандартный вид этого элемента следует изменить.
      5. Выделите элемент CheckBox1 (если до этого он не был выбран) и в окне Properties найдите свойство CheckAlign. По умолчанию его значением является MiddleLeft. Открыв меню, вы увидите, что это свойство имеет различные установки, обозначенные прямоугольниками и квадратами. Щелкните на среднем квадрате в правой колонке. После этого на нем в списке свойств появится значение MiddleRight. Первая составляющая значения MiddleRight свойства CheckAlign отвечает за выравнивание элемента CheckBox1 по вертикали, а вторая - по горизонтали. Значение MiddleRight указывает, что элемент CheckBox1 должен быть отцентрирова
      н по вертикали и выровнен по правому краю по горизонтали.
      6. Выберите элемент CheckBox1, в окне свойств найдите свойство Name и присвойте ему значение chkPayEarly.
      7. Измените текст CheckBox1, введя строку Early Payment в поле свойства Text.
      8. Поместите элемент Button в нижнем левом углу формы. Назовите эту кнопку bttnShowPayment и отобразите на ней текст Show Payment.
      9. И наконец, поместите еще один элемент Button в форму и назовите эту кнопку bttnExit, присвоив свойству Text значение Exit.
      Выравнивание элементов
      Теперь выровняйте элементы формы. Однако сначала убедитесь, что текст внутри элементов Label виден полностью. Подписи довольно длинные, и, если длина элемента недостаточна, текст может перейти на вторую строку и стать частично невидимым (рис. 2.2).
      Совет. Обязательно убедитесь в достаточной длине элементов Label, особенно при использовании нестандартного шрифта. Компьютер может заменить нестандартный шрифт другим. Тогда длина соответствующих надписей увеличится.
      Для выравнивания элементов формы LoanForm в Visual Basic применяют команды меню Format.
      1. Посредством мыши выделите в форме четыре элемента Label и выровняйте их по левому краю, вызвав команду Format | Align | Lefts. Маркеры всех выделенных элементов управления, кроме одного, будут белыми. Элемент управления, выделенный последним, будет иметь черные маркеры. Относительно этого элемента выравниваются все элементы управления с белыми маркерами. Запомните, что элемент управления, который будет использован как базовый для выравнивания других элементов, следует выделять последним. (Удерживая нажатой клавишу [Ctrl], вы можете выбрать с помощью мыши несколько
      элементов управления.)
      2. Выберите четыре текстовых поля и выровняйте их по левому краю командой Left подменю Align меню Format. Флажок CheckBox1 при этом не должен быть установлен.
      3. Отметив все четыре поля, выровняйте их относительно флажка.
      Созданная форма показана на рис. 2.1. Внимательно просмотрите ее и проверьте выравнивание элементов. При создании интерфейса разработчики нередко пренебрегают такими мелочами, как выравнивание, но пользователи их замечают.
      Программирование приложения расчета по займу
      Запустите приложение и проверьте его работу. Введите несколько значений в поля, установите или сбросьте флажок, проверьте работу встроенных в приложение функциональных средств. До тех пор, пока в приложении отсутствует программный код, щелкать на кнопке бесполезно. Если пользовательский интерфейс вас устраивает, остановите приложение, откройте форму и выполните двойной щелчок на кнопке Show Payment. Откроется окно кода с тремя строками обработчика события Click кнопки ShowPayment.
      Private Sub bttnShowPayment_Click(ByVal sender As System.Object, _
      ByVal e As System.EventArgs) Handles bttnShowPayment.Click
      End Sub
      Выше приведено объявление обработчика события нажатия кнопки Show Payment. Этот код вызывается щелчком на кнопке Show Payment. Над строками объявления обработчика события можно увидеть следующие две строки:
      Public Class LoanForm
      Inherits System.Windows.Forms.Form
      Первая строка создает новый класс для формы проекта, вторая наследует функциональность формы. Эти строки автоматически генерируются интегрированной средой разработки при вставке формы и вносить в них изменения нельзя. Узнав больше о классах и наследовании во второй части книги, вы лучше поймете смысл данных строк.
      Поместите указатель между строками Private Sub и End Sub и введите остальные строки кода из листинга 2.1 (Вы не должны дважды вводить первую и последнюю строки, которые содержат объявление обработчика событий.)
      Листинг 2.1. Кнопка Show Payment
      Private Sub bttnShowPayment_Click(ByVal sender As System.Object, _
      ByVal e As System.EventArgs) Handles bttnShowPayment.Click
      Dim Payment As Single
      Dim payEarly As DueDate
      If chkPayEarly.Checked Then
      payEarly = DueDate.BegOfPeriod
      Else
      payEarly = DueDate.EndOfPeriod
      End If
      Payment = Pmt(0.01 * txtRate.Text / 12, txtDuration.Text, _
      -txtAmount.Text, 0, payEarly)
      txtPayment.Text = Payment.ToString("#.00")
      End Sub
      Окно кода показано на рис. 2.3. Обратите внимание на символ подчеркивания в конце длинной строки: он позволяет разбить одну строку на несколько частей для облегчения просмотра. Подобное соглашение используется в тексте книги для печати длинных строк. Этот же оператор может быть задан одной строкой кода.
      Для перевода строки (когда она становится слишком длинной при вводе кода в окне редактора) не обязательно нажимать клавишу [Enter]. Откройте меню Edit и выберите команду Advanced | Word Wrap. По мере необходимости редактор будет автоматически переводить строку. О том, что режим автоматической верстки строк активен, свидетельствует флажок рядом с именем команды Edit | Advanced | Word Wrap. Чтобы отключить данный режим, вызовите эту команду еще раз.
      В первой строке кода листинга 2.1 объявляется переменная Payment. Тип переменной указывает, что она используется для хранения чисел с плавающей запятой. Во второй строке объявляется переменная типа DueDate. Данный тип определяет, когда осуществляется плата - в начале либо в конце месяца. Последним аргументом функции Pmt() должна быть переменная того же типа. Ранее в этой главе уже упоминалось, что DueDate является перечислением с двумя значениями: BegOfPeriod и EndOfPeriod. Это означает, что последним аргументом функции Pmt() может быть одно из следующих значений:
      DueDate.BegOfPeriod
      DueDate.EndOfPeriod
      Первой выполняемой строкой кода является оператор If, который осуществляет проверку состояния элемента CheckBox. Если флажок установлен, переменной payEarly присваивается значение DueDate.BegOfPeriod. В противном случае этой же переменной присваивается значение DueDate.EndOfPeriod. Когда флажок установлен, свойство Checked флажка возвращает значение True, если нет - значение False. После присвоения значения переменной payEarly вызывается функция Pmt(), которой передаются в качестве аргументов значения элементов формы.
      * Первый аргумент - процент по займу. Так как функция Pmt() может принимать только значения, не превышающие 1, то значение, введенное в поле txtRate, умножается на 0,01. Следовательно значение 14,5 (процент по займу) передается в функцию Pmt() как 0,145. Это значение потом делится на 12 для указания значения месячного процента по займу.
      * Второй аргумент - срок погашения займа (в месяцах). Его значение вводится в поле txtDuration.
      * Третий аргумент - сумма займа - значение, введенное в поле txtAmount.
      * Четвертый аргумент - будущее значение займа - по определению равен нулю.
      * Последний аргумент - переменная payEarly, которая получает значение в соответствии со статусом элемента chkPayEarly.
      Следующие два оператора преобразуют числовое значение, которое возвращает функция Pmt(), в строку и отображают эту строку в поле элемента TextBox4. Результат форматируется в соответствии с такими параметрами:
      Payment.ToString("#.00")
      Переменная Payment является числовой, а ко всем числовым значениям может быть применен метод ToString, преобразующий их в строку. Символ # используется для форматирования целой части переменной. Дробная часть округляется до сотых и отделяется от целой части посредством точки. Возвращаемое функцией Pmt() точное значение, скажем 372,2235687646345, перед отображением следует округлить и отформатировать. Поскольку банк не может выплатить сумму меньше цента, такая высокая точность здесь ни к чему. Достаточно указать число с точностью до сотых. Более подробная информация о ф
      орматировании числовых (и других) значений содержится в главе 3.
      Для отображения возвращаемого функцией Pmt() значения непосредственно в поле элемента txtPayment используйте следующий код:
      txtPayment.Text = Pmt(0.01 * txtRate.Text / 12, txtDuration.Text, _
      -txtAmount.Text, 0, payEarly)
      Приведенная строка присваивает значение, возвращаемое функцией Pmt(), свойству Text элемента управления. Месячная плата отображается в десятичном формате с четырьмя десятичными знаками после запятой (учтите, что этот формат - не самый удачный для отображения денежных значений в долларах).
      Совет. Старайтесь всегда использовать метод ToString (либо функцию Format()) для отображения результатов числовых вычислений, так как в большинстве случаев не требуется слишком высокая точность, предусмотренная в Visual Basic. Чаще всего достаточно нескольких цифр после запятой. Помимо обработки числовых значений, метод ToString можно применять для форматирования значений даты и времени. Возможности форматирования метода ToString детальнее обсуждаются в главе 12, а функция Format() описывается в разделе "Функции и операторы VB .NET" на компакт-диске.
      Код проекта LoanCalculator на компакт-диске значительно длиннее приведенного здесь. Оператор, рассмотренный в последнем разделе, составляет ту часть проекта, которая необходима для расчета. Пользователь может вводить в элементы формы любые значения, даже те, которые способны "подвесить" программу. В следующем разделе рассмотрены методы проверки корректности данных, введенных пользователем, и методы перехвата и обработки ошибок, позволяющие исправить ошибку ввода и продолжить работу.
      Проверка данных
      Ввод нечислового значения в поле может привести к аварийному останову программы. В таком случае отобразится сообщение об ошибке. Если в поле txtDuration ввести строку "twenty", то программа выведет сообщение об ошибке (рис. 2.4). Выполнение программы могут прервать и простейшие ошибки ввода. Разумеется, такая работа приложения Windows неприемлема. Приложение должно иметь средства обработки большинства ошибок и информировать о них пользователя. Если ошибка пользователя пройдет незамеченной, то приложение внезапно прекратит работу или без предупреждения выдаст неве
      рный результат.
      Щелкните на кнопке Break, чтобы открыть окно кода приложения. В приложении должна быть предусмотрена защита от любой ошибки пользователя. Один из методов, позволяющих избежать ошибок ввода, - проверка корректности числовых значений каждого элемента, а в случае ошибки - вывод соответствующего сообщения с предложением повторного ввода. Ниже приведена модифицированная подпрограмма bttnShowPayment_Click(), проверяющая значения каждого поля до начала расчетов.
      Листинг 2.2. Модифицированная подпрограмма bttnShowPayment_Click
      Private Sub bttnShowPayment_Click(ByVal sender As System.Object, _
      ByVal e As System.EventArgs) Handles bttnShowPayment.Click
      Dim Payment As Single
      Dim LoanIRate As Single
      Dim LoanDuration As Integer
      Dim LoanAmount As Integer
      'Проверка допустимых значений
      If IsNumeric(txtAmount.Text) Then
      LoanAmount = txtAmount.Text
      Else
      MsgBox("Please enter a valid amount ")
      Exit Sub
      End If
      'Проверка величины процента
      If IsNumeric(txtRate.Text) Then
      LoanIRate = 0.01 * txtRate.Text / 12
      Else
      MsgBox("Invalid interest rate, please re-enter ")
      Exit Sub
      End If
      'Проверка сроков займа
      If IsNumeric(txtDuration.Text) Then
      LoanDuration = txtDuration.Text
      Else
      MsgBox("Please specify the loan's duration as a number of months ")
      Exit Sub
      End If
      ' Если все данные введены, приступить к вычислениям
      Dim payEarly As DueDate
      If chkPayEarly.Checked Then
      payEarly = DueDate.BegOfPeriod
      Else
      payEarly = DueDate.EndOfPeriod
      End If
      Payment = Pmt(LoanIRate, LoanDuration, -LoanAmount, 0, payEarly)
      txtPayment.Text = Payment.ToString("#.00")
      End Sub
      Первоначально объявляются три переменные для параметров займа: LoanAmount, LoanIRate и LoanDuration. Их значения должны передаваться функции Pmt() в качестве аргументов. Значение каждого поля проверяется конструкцией If. Если число введено корректно, то оно присваивается соответствующей переменной, иначе программа выводит предупреждение и прекращает выполнение. Пользователь затем может изменить ошибочные значения и снова нажать кнопку ShowPayment. Встроенная функция IsNumeric() проверяет, является ли числовое значение переменной корректным, и, если это так, возвращает значение
      True (в противном случае - False).
      Если в текстовое поле Amount вводится числовое значение (21000 или 21,50), то функция IsNumeric(txtAmount.Text) возвращает значение True, после чего выполняется следующий оператор, который присваивает переменной LoanAmount значение, введенное в поле Amount. Иначе выполняется оператор, идущий за ключевым словом Else. Он выводит в окно сообщений предупреждение об ошибке и осуществляет выход из подпрограммы с помощью оператора Exit Sub так же, как и End Sub.
      Запустите модифицированное приложение и проверьте его работу, вводя в поля некорректные значения. Обратите внимание: некорректное значение последнего аргумента ввести невозможно - ввод в элемент CheckBox недопустим. Установка же и сброс флажка корректны всегда. В приложении LoanCalcalculator на компакт-диске использована именно эта версия программы с перехватом ошибок.
      Сам расчет месячных платежей занимает в программе одну строку. Еще одна строка используется для отображения результата. В то же время программа проверки ввода данных пользователя весьма обширна. Такая ситуация типична.
      Примечание. Приложения в этой книге не содержат полного, готового к использованию кода. В книге рассматриваются различные способы создания кода. Можете применять фрагменты данных примеров в собственном приложении, но, тем не менее, многое вам придется написать самим (в том числе и код обработчика ошибок, о котором вы прочтете далее).
      Создание профессиональных приложений
      Профессиональное приложение обязательно должно выполнять проверку вводимых данных. Тогда при ошибке ввода данных не происходит ничего страшного: пользователь может повторить ввод или отказаться от использования приложения и поискать другое, более подходящее. Но если пользователь вынужден повторять ввод данных вновь и вновь, ситуация осложняется. Программист обязан гарантировать ввод только корректных данных и работоспособность приложения, несмотря на любые ошибки пользователя.
      В приложениях, приведенных в этой книге, программы проверки данных заведомо упрощены, чтобы не загромождать рассмотрения второстепенными деталями. В них демонстрируются специфические приемы работы, которые вы можете использовать в собственных приложениях, однако программу проверки данных придется разрабатывать самостоятельно (а также подпрограммы обработки ошибок, речь о которых пойдет в следующем разделе).
      Запустите приложение последний раз и введите неправдоподобно большую сумму займа. Например, попытайтесь определить, во что обойдется оплата национального долга США за 72 месяца с разумными процентами. Разумеется, работа программы снова будет прервана. На этот раз вы увидите иное сообщение об ошибке: Visual Basic укажет на переполнение (рис. 2.5). Программа же остановится при выполнении оператора, в котором значение txtAmount.Text присваивается переменной LoanAmount. Нажмите кнопку [Break], и оператор, вызвавший ошибку, будет выделен.
      Совет. Переполнение (overflow) - это число, которое является настолько большим, что программа не может его обработать. Обычно такая ошибка происходит при делении на очень маленькое число. В частности, к ошибке переполнения всегда приводит деление на нуль.
      В созданном нами приложении LoanCalculator любое значение суммы займа, превышающее число 2147483647 (наибольшее значение, которое может быть присвоено переменной типа Integer), вызовет ошибку. Этого достаточно для многих задач, но недостаточно, например, для расчета бюджета страны. Из следующей главы станет понятно, что Visual Basic дает возможность использовать данные других типов, которые позволяют присваивать переменным громадные значения (например, представляя значение государственного долга в виде мизерной величины). Если же вы хотите работать с приложением LoanCalculator,
      измените объявление переменной LoanAmount на
      Dim LoanAmount As Single
      Переменным типа Single можно присваивать намного большие значения, чем переменным типа Integer. Кроме того, переменные типа Single могут содержать вещественные значения. Изначально переменную LoanAmount следовало бы объявить как Single (но тогда мы не смогли бы продемонстрировать факт переполнения).
      Ошибка переполнения может возникнуть во время проверки правильности данных в коде. Всегда существует вероятность того, что производимые программой расчеты либо другие математические операции приведут к переполнению. Проверка правильности данных в коде здесь не поможет, поскольку заранее не известно, каким будет результат. Нам требуется нечто вроде обработчика ошибок. Это дополнительный код, который обрабатывает ошибки уже после их возникновения. Вы указываете VB, что он не должен прекращать выполнение программы после вывода сообщения об ошибке. Вмес
      то этого ему следует определять ошибки и выполнять соответствующие операторы для их обработки. Очевидно, нужно написать эти операторы. Мы приведем примеры кода для отладки ошибок.
      Построение приложения MathCalculator
      Следующее приложение, математический калькулятор с типичным визуальным интерфейсом, демонстрирует простоту программирования в Visual Basic. Если читатель думает, что написание подобных приложений - слишком сложное дело, то он ошибается. Приложение MathCalculator (рис. 2.6) находится в папке данной главы прилагаемого компакт-диска. Это приложение эмулирует работу карманного калькулятора, выполняя основные арифметические операции. Его структура соответствует обычному калькулятору, но может быть расширена дополнительными функциями. Добавление функций, скажем, для вычисления косинусов или логарифмов, не сложнее выполнения основных арифметических операций.
      Разработка пользовательского интерфейса
      Средства пользовательского интерфейса приложения просты. Но некоторые усилия при их соЃ··
     

Эффективная работа: VB.NET (+CD). / Е. Петрусос - СПб: Питер, 2002. - 928 с.

Экономика и управление | Право/a> | Бухгалтерский учет и налоги |