Существует ли альтернатива LinkLabel, удобная для динамического создания?

Я пытаюсь динамически создать ссылку из формы Windows на наш веб-сайт при соблюдении определенных условий (это предупреждающее сообщение с дополнительной информацией в нашем онлайн-руководстве).

В настоящее время я нахожу LinkLabel довольно громоздким для использовать в этой ситуации: необходимость настраивать обработчики LinkClicked на лету для простой гиперссылки кажется неэлегантной.

Есть ли оболочка или альтернатива, которая удовлетворяет следующим требованиям?:

  • Унаследован от System.Windows.Forms.Control (поэтому я могу использовать его в TableLayoutPanel).
  • Имеет достаточно низкую настройку (например, нет странной проверки функции LinkClicked перед посещением)
  • Не привязан к конкретному браузеру

person Stu Pegg    schedule 01.07.2011    source источник
comment
Вы имеете в виду сторонний компонент?   -  person Kirill Polishchuk    schedule 01.07.2011
comment
@polishchuk: Если вообще можно избежать, то желательно нет.   -  person Stu Pegg    schedule 01.07.2011
comment
@Downvoter: есть ли причина для отрицательного голоса?   -  person Stu Pegg    schedule 01.07.2011


Ответы (3)


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

В любом случае реализовать себя было бы тривиально — создайте класс, наследуемый от LinkLabel, добавьте строковое свойство URL (вам может понадобиться атрибут, чтобы это отображалось на панели свойств дизайнера, если вы хотите установить его таким образом) и предоставить обработчик событий, который открывает браузер с этим URL-адресом.

Затем вы можете просто добавить элемент управления в дизайнере (или во время выполнения), установить свойство URL, и он будет работать без необходимости устанавливать обработчики событий.

person mdm    schedule 01.07.2011
comment
Я действительно рассматривал возможность написания элемента управления, наследуемого от LinkLabel, но я надеялся, что есть альтернатива (или существующий пример кода), которая избавит меня от проблем. Я неизбежно написал бы такой код только для того, чтобы обнаружить, что все это время существовал альтернативный класс. - person Stu Pegg; 01.07.2011
comment
Насколько я знаю, ничего нет, если только вам не нужен сторонний компонент (который исключается вашими предыдущими комментариями). Я понимаю, почему вы считаете LinkLabel громоздким — вы всегда можете установить обработчик событий с помощью анонимной функции (хороший пример на stackoverflow.com/questions/4359629/), который выглядит немного чище и позволяет вам установить URL-адрес на лету, когда элемент управления создан/установлен обработчик событий. - person mdm; 01.07.2011

Вы использовали событие LinkClicked вместо OnClick? Затем вы можете использовать это в обработчике событий:

    (sender as LinkLabel).LinkVisited = true;
    System.Diagnostics.Process.Start("http://example.com");

Он не привязан к конкретному браузеру — открывается в браузере пользователя по умолчанию. Настройка невелика — просто создайте экземпляр LinkLabel, добавьте подключение события к LinkClicked (это один двухстрочный метод) и добавьте его на страницу. Что неудобного в этом подходе?

person Nick B    schedule 01.07.2011
comment
Ах, я думаю, что в последнее время слишком много времени уделяю JavaScript. Я со своей стороны: LinkClicked — это название события, о котором я думал (сейчас редактирую). - person Stu Pegg; 01.07.2011
comment
Без проблем. Я не уверен, что вы колеблетесь с этим - не могли бы вы объяснить более подробно? - person Nick B; 01.07.2011
comment
Необходимость создавать промежуточный код метки, возможно, более чем в одном экземпляре (с разными ссылками), делает создание этих обработчиков событий неудобным. - person Stu Pegg; 01.07.2011

В конце концов я использовал LinkLabel.Links.Add для динамического изменения места назначения ссылки..

person Stu Pegg    schedule 26.06.2012