Не работают ссылки в RichTextBox

68
05 февраля 2022, 22:20

Сделал метод, который получает список файлов (ссылок)

        private Process _process = new Process();
        // Создание ссылки
        private void CreateLink(string pathFolder, List<LinkLabel> listLinkedLabelFile)
        {
            var selectedExtension = ExtensionFileComboBox.Text;
            string file;
            string[] inf = Directory.GetFiles(pathFolder, $"*{selectedExtension}", SearchOption.TopDirectoryOnly);
            for (var i = 0; i < inf.Length; i++)
            {
                file = Path.GetExtension(inf[i]);
                listLinkedLabelFile.Add(new LinkLabel()
                {
                    Text = inf[i],
                    Location = new Point(0, i * 15),
                    AutoSize = true,
                    Font = new Font("Calibri", 10),
                    VisitedLinkColor = Color.Maroon,
                    LinkColor = Color.MidnightBlue,
                    LinkBehavior = LinkBehavior.NeverUnderline,
                    Name = inf[i],
                    Links =
                    {
                        new LinkLabel.Link()
                        {
                            Name = inf[i]
                        }
                    }
                });
            }
        }
        // Возвращает ссылки
        private List<LinkLabel> ListPathFileFor()
        {
            var listPathFile = new List<LinkLabel>();
            var pathComboBox = FolderPathComboBox.Text;
            CreateLink(pathComboBox, listPathFile);
            return listPathFile;
        }
        //Выводит список
        private void DisplayResultButton_Click(object sender, EventArgs e)
        {
            ListOpenFoldersFile(ListPathFileFor());
        }
        // Передаёт ссылки в RichTextBox
        private void ListOpenFoldersFile(List<LinkLabel> listLinked)
        {          
            foreach (var item in listLinked)
            {                
                InfoWindowRich.Controls.Add(item);
                InfoWindowRich.LinkClicked += InfoWindowRich_LinkClicked; 
                InfoWindowRich.Font = new Font("Calibri", 15);
                InfoWindowRich.DetectUrls = true;
                InfoWindowRich.SelectionStart = InfoWindowRich.Text.Length;
                InfoWindowRich.ScrollToCaret();
            }
        }
        // В этот метод не поподает
        private void InfoWindowRich_LinkClicked(object sender, LinkClickedEventArgs e)
        {
            _process = Process.Start(e.LinkText);
        }

Пробовал иницизировать в InfoWindowRich.LinkClicked += InfoWindowRich_LinkClicked; в

        public Form1()
        {
            InitializeComponent();
            InfoWindowRich.LinkClicked += InfoWindowRich_LinkClicked;
        }

тоже не работает.

Почему не по подает в метод InfoWindowRich_LinkClicked не пойму.

Answer 1

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        this.StartPosition = FormStartPosition.CenterScreen;
        this.Text = "Пример";
        this.Load += Form1_Load;
    }
    private void Form1_Load(object sender, EventArgs e)
    {
        //готовим ссылки
        LinkLabel linkLabel1 = new LinkLabel
        {
            Location = new Point(0, 10),
            Text = "Ссылка 1",
            Links = { new LinkLabel.Link { Name = "Ссылка1" } },
        };
        LinkLabel linkLabel2 = new LinkLabel
        {
            Location = new Point(0, 45),
            Text = "Ссылка 2",
            Links = { new LinkLabel.Link { Name = "Ссылка2" } },
        };
        //подписываеся на клики по ссылкам, метод один и тот же
        linkLabel1.Click += LinkLabel_Click;
        linkLabel2.Click += LinkLabel_Click;
        //отображаем ссылки
        _richTextBox.Controls.Add(linkLabel1);
        _richTextBox.Controls.Add(linkLabel2);
    }
    private void LinkLabel_Click(object sender, EventArgs e)
    {
        //приводим к нужному типу
        var linkLabel = sender as LinkLabel;
        if (linkLabel == null)
            return;
        var message = $"Вы выбрали ссылку: {linkLabel.Links[0].Name}";
        MessageBox.Show(message, "Сообщение",
            MessageBoxButtons.OK, MessageBoxIcon.Information);
    }
}
READ ALSO
Не могу получить html код сайта

Не могу получить html код сайта

Пытаюсь получить HTML код с сайта https://wwwrbc

68
ASP .NET Core MVC: как правильно использовать Partial View?

ASP .NET Core MVC: как правильно использовать Partial View?

Помогите, пожалуйста, разобраться с проблемой вызова Partial View

107
Ввод данных в поле EO.WebBrowser C#

Ввод данных в поле EO.WebBrowser C#

Всех приветствуюМне нужно вводить определенные данные в текстовые поля сайта после загрузки страницы

73