ПОНЯТНО О Visual Basic NET (том 2)

Методы, «придирчивые» к типу параметров


Попробуйте в предыдущем примере о треугольнике в одном из методов DrawLine в качестве параметра задать дробное число, скажем так:

        Граф.DrawLine(Pens.Black, x1 / 3, y1, x2, y2)

или так:

        Граф.DrawLine(Pens.Black, x1 + 0.8, y1, x2, y2)

Немедленно VB подчеркнет оператор и выдаст подсказку об ошибке, в которой вы увидите слова Double, Integer и Single. В чем дело? Давайте разберемся.

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

Первый способ. Поставьте текстовый курсор на название метода в окне кода (пусть это будет DrawLine) и нажмите клавишу F1. Перед вами возникнет окно помощи, в котором вы чаще всего найдете следующий список (Рис. 6.11).

Рис. 6.11

Заголовок означает «Список вариантов метода». Не обращайте пока внимания на слова Overloads Public Sub в начале каждой из 4 интересующих нас строк. Далее в каждой строке идет слово DrawLine, а за ним в скобках – список параметров метода, причем в списке приведены именно типы параметров. Почему строк 4, а не одна? Потому что существует 4 варианта этого метода. Каждый из них чертит одни и те же линии, а отличаются варианты параметрами. В типах верхних двух вариантов мы пока даже не можем разобраться, а вот нижние два для нас имеют смысл. Тип первого параметра –  Pen. Мы этот тип пока не проходили, но согласимся. Он нас пока не интересует. Остальные четыре параметра – это, как мы знаем, координаты точек. Мы видим, что они должны иметь тип или Integer, или Single.

Второй способ. Найдите в Object Browser класс Graphics и выделите. В правой панели вы увидите его свойства и методы. Среди них вы найдете и 4 варианта метода DrawLine с указанием параметров (см. Рис. 6.12).

Рис. 6.12



Есть и другие способы.

Причина ошибки. Типы параметров мы узнали. Почему VB выдает ошибку? Потому что результат деления  x1/3  имеет, как мы узнали в 5.4.6, тип Double. И результат сложения  x1+0.8 тоже имеет тип Double. А нужен  Integer или Single. Вот и весь ответ.


Что делать? Способов несколько.
  • Можно объявить переменные  x1, y1, x2, y2  не как Integer, а как Single. Это поможет в случае с делением, так как деление Single на Integer дает Single. А в случае со сложением не поможет, так как сложение Single и Double дает Double.

  • Можно изменять надлежащим образом тип литералов, ставя в их конец символы типа. Так,  x1 + 0.8F   вполне удовлетворит VB.

  • Можно применять функции преобразования типов. Положение спасет, например:

  •         Граф.DrawLine(Pens.Black, CSng(x1 + 0.8), y1, x2, y2)
    • Можно, в конце концов, отказаться от указания типа при объявлении переменных.

    • Задание 4.   
      1. Подготовительная задача. Начертить цилиндр радиуса 100 и высотой 200, такой, как на Рис. 6.13. Высота эллипсов, изображающих основания цилиндра, должна быть в два раза меньше их ширины. Переменными можно не пользоваться.
      2. Основная задача. Даны радиус и высота цилиндра. Вычислить объем цилиндра и полную площадь его поверхности. Начертить (это нелегко) цилиндр данного радиуса и высоты. Радиус и высоту вводить в два текстовых поля. Объем и площадь выводить на поверхность формы методом DrawString с 3 знаками после запятой и с текстовыми пояснениями. Высота эллипсов, изображающих основания цилиндра, должна быть в два раза меньше их ширины (см. Рис. 6.13).

      Рис. 6.13
      Ненадолго расстаемся. Того, чему мы научились, нам вполне хватит для рисования в последующих главах любопытных вещей. Кроме методов рисования рассмотренных нами фигур существуют еще методы рисования многоугольников, кривых Безье, сплайнов и некоторых других. Кроме того, перья, кисти и шрифты гораздо более богаты, чем рассмотренные нами. Мы пока только чуть-чуть прикоснулись к графическим возможностям VB. Дальнейшие возможности графики будут изложены в Глава 12.  и Глава 17. . Но не советую прямо сейчас туда отправляться. Будет непонятно.

      Содержание раздела