Опубликован: 25.03.2010 | Уровень: для всех | Доступ: платный
Лекция 13:

Класс Control и стандартные элементы управления (обзор)

Метка-ссылка LinkLabel

Этот элемент обладает свойствами традиционной HTML -гиперссылки Hyperlink. Помимо наследуемых от Control свойств BackColor и ForeColor метка-ссылка имеет характерные для Hyperlink свойства:

  • LinkColor - цвет исходного отображения непосещенной ссылки (по умолчанию синий)
  • DisabledLinkColor - цвет недоступной ссылки (по умолчанию серый)
  • ActiveLinkColor - цвет ссылки при щелчке на ней (по умолчанию красный)
  • VisitedLinkColor - цвет посещенной ссылки (по умолчанию сиреневый)

Метка-ссылка определяется свойством Text, но активная ее часть, воспринимаемая как гиперссылка, задается свойством LinkArea. Это свойство представляет собой структуру LinkArea с общедоступными полями Start и Length типа int. Например

using System;
using System.Drawing;
using System.Windows.Forms;
    
class MyClass : Form
{
    public MyClass()
    {
        this.Font = new Font("Arial", 14);
        LinkLabel linkLabel = new LinkLabel();
        this.Controls.Add(linkLabel);
        linkLabel.Dock = DockStyle.Fill;
        linkLabel.Text = "Щелкните здесь 
    для появления сообщения";
        linkLabel.LinkArea = new LinkArea(9, 5);
        linkLabel.LinkBehavior = LinkBehavior.SystemDefault;
        linkLabel.LinkClicked += new LinkLabelLinkClickedEventHandler(linkLabel_LinkClicked);
    }
    
    void linkLabel_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
    {
        MessageBox.Show("Вы щелкнули на метке-ссылке");
    }
}
Листинг 13.9.

Поведение ссылки задается свойством LinkBehavior, ожидающим одно из значений одноименного перечисления System.Windows.Forms.LinkBehavior. По умолчанию установлено LinkBehavior=SystemDefault, определяющее поведение ссылки как в Microsoft Internet Explorer.

Одной метке можно назначить несколько ссылок с помощью свойства Links, которое является объектом составного класса LinkLabel.LinkCollection. Щелчок на ссылке LinkLabel инициирует событие LinkClicked, обработчик которого определяется делегатом LinkLabelLinkClickedEventHandler. Объект типа LinkLabelLinkClickedEventArgs, сопровождающий обработчик, является экземпляром составного класса LinkLabel.Link и несет данные активированной ссылки ( URL или имя файла) в свойстве LinkData типа Object.

Приведем пример, в котором программа Windows Forms отвечает на нажатие ссылки запуском другого процесса, используя метод System.Diagnostics.Process.Start().

using System;
using System.Drawing;
using System.Windows.Forms;
using Return = System.Environment;// Псевдоним класса
    
class MyClass : Form
{
    public MyClass()
    {
        this.Font = new Font("Arial", 14);
        this.Width = 2 * this.Height;
        this.Text = "Элемент управления LinkLabel";
    
        LinkLabel linkLabel = new LinkLabel();
        linkLabel.Parent = this;
        linkLabel.Dock = DockStyle.Fill;
        linkLabel.Text = "Из этого приложения 
    Вы можете:" + Return.NewLine
               + "\n1. Подключиться к сайту корпорации 
    \"Майкрософт\"" + Return.NewLine
    + "2. Запустить графический редактор \"
    Microsoft Paint\"" + Return.NewLine
    + "3. Запустить игру \"
    Косынка\"" + Return.NewLine
    + "4. Запустить текстовый редактор \"
    Блокнот\"" + Return.NewLine;
        string subStr = "Майкрософт";
        linkLabel.Links.Add(linkLabel.Text.IndexOf(subStr),
            subStr.Length, "http://www.microsoft.com");
        subStr = "Microsoft Paint";
        linkLabel.Links.Add(linkLabel.Text.IndexOf(subStr),
            subStr.Length, "msPaint");
        subStr = "Косынка";
        linkLabel.Links.Add(linkLabel.Text.IndexOf(subStr),
            subStr.Length, "Sol");
        subStr = "Блокнот";
        linkLabel.Links.Add(linkLabel.Text.IndexOf(subStr),
            subStr.Length, "Notepad");
    
        linkLabel.LinkClicked += 
            new LinkLabelLinkClickedEventHandler(linkLabel_LinkClicked);
    }
    
    void linkLabel_LinkClicked(object sender, 
        LinkLabelLinkClickedEventArgs e)
    {
        string strLink = e.Link.LinkData as string;
        if (strLink != null)
            try
            {
                System.Diagnostics.Process.Start(strLink);
            }
            catch (Exception err)
            {
                string strError = "Не могу выполнить процесс !!!\n"
                + "Ошибка: " + err.Message;
                MessageBox.Show(strError);
            }
    }
}
Листинг 13.10.

Результат выполнения примера будет таким


Щелчки на ссылках запускают соответствующие программы. Для подстраховки мы отлавливаем возможные исключения Windows.

Максим Филатов
Максим Филатов

Прошел курс. Получил код Dreamspark. Ввожу код на сайте, пишет:

Срок действия этого кода проверки уже истек. Проверьте, правильно ли введен код. У вас осталось две попытки. Вы также можете выбрать другой способ проверки или предоставить соответствующие документы, подтверждающие ваш академический статус.

 

Как активировать код?

Денис Пашков
Денис Пашков
Россия
Татьяна Ковалюк
Татьяна Ковалюк
Украина, Киев, Киевский политехнический институт, 1974