netlib.narod.ru< Назад | Оглавление | Далее >

Кнопки с изображениями

В своем стремлении предоставить пользователю уникальный интерфейс не все удовлетворяются изменением шрифта и цветов на кнопках. Поместить на кнопку графическое изображение можно двумя способами. Первый — использовать четыре свойства класса ButtonBase:


Свойства ButtonBase (выборочно)



Тип Свойство Доступ

Image Image Чтение/запись
ImageList ImageList Чтение/запись
int ImageIndex Чтение/запись
ContentAlignment ImageAlign Чтение/запись


Эти свойства позволяют указать фоновое растровое изображение для кнопки. Можно либо указать для свойства Image конкретный объект Image или Bitmap, либо для свойства ImageList — объект ImageList и присвоить свойству ImageIndex значение индекса в списке изображений. Значение свойства ImageAlign по умолчанию равно ContentAlignment.MiddleBottom.

Эти изображения вы можете получать любым способом: из ресурсов, файлов или формировать прямо в программе. Ширину и высоту кнопки следует указать равными ширине и высоте изображения плюс 8 (4 пиксела на каждую границу).

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

Далее приведена версия программы TwoButtons, которая загружает из ресурсов два изображения размером 64 × 64 пиксела.

BitmapButtons.cs

  //----------------------------------------------
  // BitmapButtons.cs (C) 2001 by Charles Petzold
  //----------------------------------------------
  using System;
  using System.Drawing;
  using System.Windows.Forms;

  class BitmapButtons: Form
  {
      readonly int    cxBtn, cyBtn, dxBtn;
      readonly Button btnLarger, btnSmaller;

      public static void Main()
      {
          Application.Run(new BitmapButtons());
      }
      public BitmapButtons()
      {
          Text = "Bitmap Buttons";
          ResizeRedraw = true;

          dxBtn = Font.Height;

          // Создаем первую кнопку

          btnLarger = new Button();
          btnLarger.Parent = this;
          btnLarger.Image  = new Bitmap(GetType(), 
                                   "BitmapButtons.LargerButton.bmp") ;

          // Вычисляем размеры кнопки по размеру изображения

          cxBtn = btnLarger.Image.Width  + 8;
          cyBtn = btnLarger.Image.Height + 8;

          btnLarger.Size   = new Size(cxBtn, cyBtn);
          btnLarger.Click += new EventHandler(ButtonLargerOnClick);

          // Создаем вторую кнопку

          btnSmaller = new Button();
          btnSmaller.Parent = this;
          btnSmaller.Image  = new Bitmap(GetType(), 
                                   "BitmapButtons.SmallerButton.bmp");
          btnSmaller.Size   = new Size(cxBtn, cyBtn);
          btnSmaller.Click += new EventHandler(ButtonSmallerOnClick);

          OnResize(EventArgs.Empty);
      }
      protected override void OnResize(EventArgs ea)
      {
          base.OnResize(ea);

          btnLarger.Location =
                         new Point(ClientSize.Width / 2 - cxBtn - dxBtn / 2,
                                  (ClientSize.Height - cyBtn) / 2);
          btnSmaller.Location =
                         new Point(ClientSize.Width / 2 + dxBtn / 2,
                                  (ClientSize.Height - cyBtn) / 2);
      }
      void ButtonLargerOnClick(object obj, EventArgs ea)
      {
          Left   -= (int)(0.05 * Width);
          Top    -= (int)(0.05 * Height);
          Width  += (int)(0.10 * Width);
          Height += (int)(0.10 * Height);
      }
      void ButtonSmallerOnClick(object obj, EventArgs ea)
      {
          Left   += (int)(Width  / 22f);
          Top    += (int)(Height / 22f);
          Width  -= (int)(Width  / 11f);
          Height -= (int)(Height / 11f);
      }
  }

Рис. 12.5.

В программе вычисляются величины cxBtn и cyBtn на основе размеров растрового изображения плюс 8. После создания каждой кнопки конструктор загружает растровое изображение из ресурсов и устанавливает свойство кнопки Image. Вот как выглядят кнопки:


Рис. 12.7.


netlib.narod.ru< Назад | Оглавление | Далее >

Сайт управляется системой uCoz