Шаг 173.
Microsoft Visual C++ 2010. Язык С/С++.
Компоненты Windows Forms. Компонент LinkLabel (продолжение)

    На этом шаге мы рассмотрим более подробно, как формируется гиперссылка.

    Рассмотрим более подробно сам процесс создания гиперссылки. Во-первых, у нее есть наименование, которое помещается в свойство Text, и собственно сама ссылка, т. е. путь к объекту, на который идет ссылка.

    Куда помещается сама ссылка? Она помещается в свойство Links, которое не отражается в окне Properties (Свойства). Из самого названия свойства (связи, ссылки) следует, что, ссылок можно задавать и больше, чем на один объект. Это свойство является указателем на элемент LinkCollection класса LinkLabel, который содержит множество M{} ссылок, задающихся в LinkLabel, поэтому можно воспользоваться методами этого класса, в частности - методом Add(), который добавляет в M{} новую гиперссылку (это можно сделать только в тексте программы, т. к. свойство Links не высвечивается в окне Properties (Свойства)).

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


Рис.1. Задание ссылки в свойстве LinkArea

    Остальные ссылки можно задать в тексте программы, помещая их в свойство Links методом Add(). В любом случае, зададите ли вы одну-единственную ссылку или множество, все они в режиме исполнения приложения попадут во множество M{}, т. е. в свойство Links. Следовательно, если вы задаете в тексте программы даже единственную ссылку, то можно поместить ее сразу в первый элемент из множества M{}, однако сведения о том, что это единственная ссылка, надо все же отразить в свойстве LinkArea.

    Каким образом?

    Дело в том, что сама ссылка непосредственно связана со своим наименованием, т. е. с текстом этого наименования, который хранится в свойстве Text.


Рис.2. Значение свойства Text

    Это свойство содержит строку символов (точнее - слов). Слова следует пометить так, чтобы было понятно, что они отображают названия гиперссылок. Если слово отображает наименование гиперссылки, оно сразу оказывается непохожим на остальные части текста в строке свойства Text: такое слово становится подчеркнутым, цвет его шрифта изменяется в соответствии с цветом, установленным в свойстве LinkColor (цвет выбирается из всплывающей палитры цветов, если в поле свойства нажать на кнопку со стрелкой).

    Например, свойство Text содержит текст "Это гиперссылка, а это просто текст". Если вы пометили часть текста "Это гиперссылка" таким образом, чтобы она относилась к наименованию гиперссылки, то когда в режиме исполнения приложения вы на такую помеченную часть текста наведете курсор мыши, его вид изменится: он станет изображаться в виде кисти руки. Это означает, что в этом месте можно щелкнуть кнопкой мыши и программа отошлет нас к объекту, адрес которого находится в свойстве Links в соответствующем его элементе, имеющем тот же порядковый номер от начала множества, что и помеченная ссылкой часть текста в свойстве Text. Сколько частей в свойстве Text мы пометим в качестве названий гиперссылок, столько фактических адресов объектов, на которые будет идти ссылка из помеченных частей текста в свойстве Text, надо будет задать в свойстве Links, иначе возникнет исключительная ситуация, которая, если ее не обработать, приведет аварийному останову программы.

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

    В самом свойстве LinkArea (а можно в его подсвойствах - Start и Length) надо набрать соответственно номер начальной позиции (счет от нуля) и длину подстроки, набранной в редакторе LinkArea (то, что набирается в редакторе LinkArea, автоматически попадает в свойство Text), которая будет играть роль имени первой и, возможно, единственной, гиперссылки. Если вы набираете координаты имени гиперссылки в самом поле LinkArea, то начало и длину имени следует набирать через точку с запятой (рисунок 1).

    Например, в поле редактора вы набрали текст "Это гиперссылка, а это просто текст". В свойстве LinkArea автоматически установятся значения (35; 0). Получатся данные: Start=35 и Length=0 (рисунок 3).


Рис.3. Задание значений в LinkArea

    Это неправильно. И свидетельством тому явится исчезновение подсветки шрифта в наименовании, которое мы ввели. Вы должны за этим проследить и самостоятельно установить значения подсвойств Start и Length.

    Если, например, зададите величины: 0; 23, то получите подсвеченный и подчеркнутый текст такой: "Это гиперссылка, а это просто текст" (остальные символы заданного текста не станут отражать название гиперссылки).


Рис.4. Изменение внешнего вида гиперссылки

    Если же зададите: 0; 15, то получите Это гиперссылка (рисунок 5).


Рис.5. Изменение внешнего вида гиперссылки

    Для выделения остальных частей строки текста из свойства Text вы должны задавать начало и длину в программе и помещать их (как и сами адреса объектов) в элементы свойства Links. Если, например, вы станете добавлять данные из объекта textBox1, то оператор добавки будет выглядеть так:

  this->linkLabel1->Links->Add( (int)ArStart[i], 
        (int)ArLen[i], this->textBox1->Lines[i]);
Здесь аргументы (int)ArStart[i], (int)ArLen[i] означают i-ые элементы массивов, где хранятся соответственно номера символов начальных позиций и длин текста из свойства Text, которые будут помечены в качестве наименования гиперссылки, добавляемой в качестве пути к объекту из i-й строки textBox1. Начало и длина принудительно переводятся в тип int, как требует того формат метода Add(), потому что массивы ArStart[],ArLen[] - это числовые (Int32) managed-массивы.

    Когда у нас в проекте несколько гиперссылок, то требуется отмечать, что мы щелкали на какой-то конкретной гиперссылке (как говорят, "посетили" гиперссылку), иначе в работе может наступить полная путаница.

    В классе Links имеется на этот счет специальное свойство Visited, устанавливаемое в значения true (посетили ссылку) и false (не посещали ссылку). Кроме того, к ссылке можно разрешить или запретить доступ с помощью установки в значения true и false другого свойства класса Links - свойства Enabled.

    На следующем шаге мы закончим изучение этого вопроса.




Предыдущий шаг Содержание Следующий шаг