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

         

Картинка, как свойство Image элемента управления


Картинки можно размещать на многих элементах управления. Рассмотрим  PictureBox. Для размещения картинки в PictureBox мы должны установить его свойство Image. В режиме проектирования это делается совершенно так же, как мы это делали в 3.6.

У элемента PictureBox имеется свойство SizeMode, которое управляет положением картинки на элементе. Вот его значения:

Normal

Левый верхний угол картинки совпадает с левым верхним углом PictureBox. Если картинка больше PictureBox, то выступающие ее части не видны.

CenterImage

Картинка размещается в центре PictureBox. Если картинка больше PictureBox, то выступающие ее части не видны.



AutoSize

PictureBox автоматически изменяет свои размеры так, чтобы они равнялись размерам картинки.

StretchImage

Картинка автоматически изменяет свои размеры так, чтобы они равнялись размерам PictureBox.

У PictureBox есть также свойство BackgroundImage. Это картинка, которая мозаикой покрывает поверхность элемента на заднем плане. Она становится видна, если Image покрывает не всю поверхность элемента.

Свойство Image элементу управления можно устанавливать и в коде. Для этого быстрее всего использовать метод FromFile, принадлежащий классу Image. (Пусть вас не путает то, что свойство и класс имеют одинаковые имена. Для VB это в порядке вещей.) Если вы хотите, чтобы картинка оказалась на элементе управления, необходимо, чтобы файл с этой картинкой уже хранился на дисках вашего компьютера. Если вы не можете найти ни одного файла с картинкой, то подскажу, что в папке Windows вы всегда отыщете картинки – обои рабочего стола или в крайнем случае найдете что-нибудь по адресу

Program Files\Microsoft Visual Studio .NET\Common7\Graphics

Рекомендую предварительно скопировать файлы картинок в папку bin вашего проекта. Тогда обращаться к ним можно будет просто по имени, без необходимости указания полного адреса. Кстати, и картинки всегда будут при вас.

Вот оператор, устанавливающий свойство Image элементу PictureBox:

        PictureBox1.Image


= Image.FromFile("Earth.JPG")
Здесь слева от знака равенства – свойство Image, справа – класс Image. Обратите внимание, что в кавычках я указал только имя файла Earth.JPG. Это стало возможным потому, что я скопировал файл в папку bin проекта. Иначе пришлось бы указать полный адрес: "D:\Фотографии\ Earth.JPG".
Элементы управления вполне могут заимствовать друг у друга картинки:
        Button2.Image = PictureBox1.Image
 Если мы хотим, чтобы на элементе управления картинки больше не было, мы пишем:
        Button2.Image = Nothing
Слово Nothing означает «Ничто», то есть картинки никакой нет.
Задание 70.    
Вы профессиональный продавец автомобилей. Вы приезжаете к покупателю, достаете портативный компьютер, на экране – несколько десятков кнопок, на каждой – маленькая фотография одного из продаваемых автомобилей. Покупатель говорит: «Вот этот покажите, пожалуйста». Вы нажимаете эту кнопку и на экране возникает та же фотография, но увеличенная.
Помощь: Если вы собираетесь в качестве кнопок использовать элементы управления Button, то вам придется предварительно позаботиться об уменьшении фотографий до размеров кнопок. Но можно и избежать такой потери времени. Ведь кнопками могут служить объекты PictureBox! Потому что у объекта PictureBox тоже есть событие Click! Создайте на форме несколько маленьких PictureBox и один большой и в маленькие впишите фото. По щелчку мыши по маленькому PictureBox большой PictureBox пусть копирует в себя его картинку.
Необязательное усложнение для тех, кто не боится системы координат: Если у вас фотографии имеют одинаковые размеры и пропорции, то все хорошо и ничего дополнительно делать не нужно. Проблемы возникают тогда, когда размеры и пропорции исходных фото разные: одни фото большие и продолговатые по горизонтали, другие – по вертикали, третьи маленькие квадратные. Во-первых, проблемы возникают уже с кнопками, потому что, чтобы фото на них не были искажены или обрезаны, они сами должны иметь разную продолговатость. Но Бог с ними, с кнопками, нам хочется, чтобы хоть большие-то картинки располагались на экране симметрично как по горизонтали, так и по вертикали, и имели максимально возможный размер. Вот этой цели я и хочу достигнуть. Для этого придется использовать оператор ветвления, а также свойства, задающие размер и местоположение объектов. Проверьте, чтобы форма была распахнута на весь экран. Как это сделать, я объяснял  в 3.4.3. После щелчка мыши по кнопке компьютер должен сделать следующее:


  • Настроить большой PictureBox, чтобы он подстраивался под размеры картинки, установив его сами знаете какое свойство.

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

  • Мы предвидим, что размеры PictureBox придется изменять. Надо теперь заставить картинку принимать размеры PictureBox, установив по-другому то же самое свойство.

  • Поделить ширину формы на ее высоту, чтобы узнать ее «продолговатость». (Это надо бы пораньше, да ладно.)

  • Поделить ширину PictureBox на его высоту, чтобы узнать «продолговатость» картинки.

  • Если продолговатость картинки больше, чем продолговатость формы, то в идеале при максимальном увеличении картинка должна почти упереться левым и правым краем в края формы, а сверху и снизу должно остаться одинаковое пространство. Для этого нужно выполнить несколько операторов присваивания, увеличивающих размер и изменяющих местоположение PictureBox, да так, чтобы продолговатость PictureBox равнялась продолговатости картинки.

  • Если продолговатость картинки меньше, чем продолговатость формы, то в идеале при максимальном увеличении картинка упрется верхним и нижним краем в края формы, а слева и справа должно остаться одинаковое пространство. Здесь тоже нужно выполнить несколько аналогичных операторов.

  • Таким образом, при щелчке по кнопке на форме возникает фото максимальных размеров и по центру.

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